return next() 应该放在 node.js 的 Restify 模块中的什么地方?

Where to put return next() properly in Restify module in node.js?

这是一个从数据库查询用户的例子,如果用户存在,另一个查询 phone:

module.exports = function (username, req, res, next) {

    var query = User.where('username', new RegExp('^' + username + '$', 'i'));
    query.findOne(function (err, user) {
        if (err) {
            res.send("error");
            //## position D
        } else if (!user) {
            res.send("user not found");
            //## position D
        } else {
            //user exists
            //search for phone
            var query2 = Phone.where('phone', new RegExp('^' + user.phone + '$', 'i'));
            query2.findOne(function (err, phone) {
                if (err) {
                    res.send("error");
                    //## position D
                } else if (!phone) {
                    res.send("phone not found");
                    //## position D
                } else {
                    res.send(phone);
                    //## position D
                }
                //## position C
            });
        }
        //## position B
    });
    //## position A
}

我的问题是:根据这段代码,设置的正确位置在哪里 return 下一步(); ?为什么?

我设置了一些建议:

P.S:我知道我可以在 next 中将错误作为对象传递。我只是想让代码简单以专注于主要问题。

谢谢 yokefellows,'。

当然是位置 D,但是你可以 "cleaner" 回调。

module.exports = function (username, req, res, next) {

    var query = User.where('username', new RegExp('^' + username + '$', 'i'));
    query.findOne(function (err, user) {
        if (err) {
            return next(err);
        }
        if (!user) {
          res.send("user not found");
          return next();
        }
        //user exists
        //search for phone
        var query2 = Phone.where('phone', new RegExp('^' + user.phone + '$', 'i'));
        query2.findOne(function (err, phone) {
            if (err) {
                return next(err);
            }
            if (!phone) {
                res.send("phone not found");
            } else {
                res.send(phone);
            }
            next();
        });
    });
}