Node.js 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) {

我看到了很多答案,但我仍然无法做到这一点。 我有一个简单的函数,我想返回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) {
                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回调函数中返回您期望的值。