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 下一步(); ?为什么?
我设置了一些建议:
位置A:@函数底部。在这里它甚至会被称为
早于从数据库查询数据
位置B:@第一个回调函数底部
位置C:@最后一个回调函数的底部
位置D:res.send(..)后立即
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();
});
});
}
这是一个从数据库查询用户的例子,如果用户存在,另一个查询 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 下一步(); ?为什么?
我设置了一些建议:
位置A:@函数底部。在这里它甚至会被称为 早于从数据库查询数据
位置B:@第一个回调函数底部
位置C:@最后一个回调函数的底部
位置D:res.send(..)后立即
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();
});
});
}