在node.js的retify模块中正确放置return next()的位置

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

本文关键字:return next 位置 js node retify 模块      更新时间:2023-09-26

下面是一个从数据库查询用户的例子,如果用户存在,另一个查询电话:

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
}

我的问题是:基于这段代码,在哪里是正确的地方设置返回next();为什么呢?

我设置了一些建议:

  • 位置A: @功能底部。在这里它被称为偶数

  • 位置B: @第一个回调函数的底部

  • 位置C: @上次回调函数底部

  • 位置D:在res.send(…)之后立即

p。S:我知道我可以将error作为对象传递到next..我只是想让代码简单,专注于主要问题。

谢谢同负一轭的,"。

位置D,当然,但你可以有一些更"干净"的回调。

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();
        });
    });
}