Node.js Mongoose回调
我看到了很多答案,但我仍然无法做到这一点。 我有一个简单的函数,我想返回Mongoose上查询查找的长度。 它是这样的:Node.js Mongoose回调,node.js,asynchronous,express,callback,mongoose,Node.js,Asynchronous,Express,Callback,Mongoose,我看到了很多答案,但我仍然无法做到这一点。 我有一个简单的函数,我想返回Mongoose上查询查找的长度。 它是这样的: app.use(function(req, res, next) { res.locals.user = null if (req.isAuthenticated()) { res.locals.user = req.user; getMt(req.user.id, function(val) {
app.use(function(req, res, next) {
res.locals.user = null
if (req.isAuthenticated()) {
res.locals.user = req.user;
getMt(req.user.id, function(val) {
console.log(val) // == 5
res.locals.mt = val;
});
}
console.log(res.locals.mt); // == undefined
....
}
function getMt(user_id, callback) {
var Model = require('./models/mt');
Model.find({'users.user_id': user_id}, 'token', function(err, list) {
if (err)
callback(0);
if (!list)
callback(0);
if (list)
callback(list.length);
});
}
我读了很多关于异步的书,但仍然找不到解决这个问题的方法。
res.locals.mt在回调中的res.locals.mt=val之后仍然显示未定义
有人能给我指出正确的方向吗?
提前谢谢。这能帮你达到目的吗
function getMt(user_id, callback) {
var Model = require('./models/mt');
Model.count({'users.user_id': user_id}, function(err, count) {
if (err) {
console.log(err.stack);
return callback(0);
}
callback(count);
});
}
调用下一个函数
app.use(function(req, res, next) {
res.locals.user = null
if (req.isAuthenticated()) {
res.locals.user = req.user;
getMt(req.user.id, function(val) {
console.log(val) // == 5
res.locals.mt = val;
next(); //<---- add this!!!
});
}
....
}
确切的问题是什么?请定义它。听起来像是.count的例子?除了使用count之外,Model.find调用中的第二项应该是一个对象。在你的查询中试试这个:Model.find{some:'query'},{token:true},functionerr,list{}这是一个更好的计数方法,但是我无法让val设置res.locals.mt,这是我的目标。对不起,这个问题我不清楚。正在编辑。@egnd09请记住,res.locals.mt将仅在后续的app.get/post/use调用中设置。在您的问题示例中,console.logres.locals.mt仅在getMt回调函数中返回您期望的值。