我正在开发一个NodeJS应用程序,并且像这样导出一个函数:
module.exports = {
userCount: function(done) {
user.count(function(err, count) {
done(count);
});
}
}
我要做的是将回调传递给视图。这就是我目前的做法:
methods.userCount(function(count) {
app.get("/", function(req, res) {
res.render("../views/index", {
userCount: count
});
});
});
工作正常但我的问题是会导出多个函数,因此,我需要将多个回调传递给同一个视图。
我目前正在采用的方式是将回调传递给视图的最佳/唯一方式吗?
我想到的另一种方法是声明一个变量,只需将回调添加到变量中。像这样:
var num;
methods.userCount(function(count) {
num = count;
});
res.render("../views/index", {
userCount: num
});
但我不确定这是不是很好。有更好的方法吗?
答案 0 :(得分:1)
你应该在路由处理程序中调用userCount
函数而不是相反:
app.get("/", function(req, res) {
methods.userCount(function(count) {
res.render("../views/index", {
userCount: count
});
});
});
如何计算计数是一个应该在userCount
方法中的实现细节。
我认为更好的方法是将userCount
方法作为路线middleware运行,并将计数附加到res.locals
:
app.use(function(req,res,next) {
// error handling omitted for simplicity
methods.userCount(function(count) {
res.locals.count = count;
next();
});
})
app.get("/", function(req, res) {
res.render("../views/index", {
userCount: res.locals.count
});
});
答案 1 :(得分:0)
Step可能对你有帮助吗?
function method(callback) {
var err = null;
var result = 123;
callback(err, result);
}
function method2(callback) {
var err = null;
var result2 = 'abc';
callback(err, result2);
}
app.get("/", function(req, res) {
Step(
function getData() {
method(this); // this is a callback for the next function on Step
},
function getAnotherData(err, result) { // err, result is the reply of method()
req.result = result; // keep result to use on next function
method2(this);
},
function render(err, result2) {
res.render('view', {
result: req.result,
result2: result2
});
}
)
});