gpt4 book ai didi

javascript - 在 Node.js 的 Restify 模块中,在哪里正确放置 return next() ?

转载 作者:行者123 更新时间:2023-12-03 09:57:00 24 4
gpt4 key购买 nike

这是一个从数据库查询用户的示例,如果用户存在,则另一个查询电话:

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
}

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

我提出了一些建议:

  • 位置A:@函数底部。在这里它会被称为甚至早于从数据库查询数据

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

  • 位置C:@最后一个回调函数底部

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

P.S:我知道我可以将错误作为对象传递给 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();
});
});
}

关于javascript - 在 Node.js 的 Restify 模块中,在哪里正确放置 return next() ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30699164/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com