node.js - 如何将模型结果传递给节点 js 中的视图
问题描述
我是 node.js 的新手,尝试制作一些小应用程序。一切都很好,但我无法在函数之外传递模型数据:
工作代码是:
usermodel = require('../models/usermodel.js');
exports.index = function(req, res) {
var stuff_i_want = '';
usermodel.userlist(req, function(result)
{
//stuff_i_want = result;
res.render('index.ejs', {
title: "Welcome to Socka | View Players",
players:result
});
//rest of your code goes in here
});
console.log(stuff_i_want);
};
但我想要一些类似的东西:
usermodel = require('../models/usermodel.js');
exports.index = function(req, res) {
var stuff_i_want = '';
usermodel.userlist(req, function(result)
{
stuff_i_want = result;
//rest of your code goes in here
});
console.log(stuff_i_want);
res.render('index.ejs', {
title: "SA",
players:result
});
};
解决方案
您正在调用一个异步函数userlist
,这就是您在回调中需要它的原因。您可以使用诸如bluebirdjs之类的 Promise 库,并将您的用户模型实现重构为标准 nodejs 函数参数(err, result)
。在这种情况下,您可以像下面这样重构它
const usermodel = require('../models/usermodel.js');
exports.index = async function(req, res) {
const players = await new Promise((resolve, reject) => {
usermodel.userlist(req, function(result){
resolve(result)
});
})
res.render('index.ejs', {
title: "SA",
players
});
};