如果我有一个类似的数组:
var users = [
{ name: 'joe', info : 'this man's name is joe'},
{ name : 'betty', info : 'this woman's name is betty'}
];
和路线如:
app.get('/test/:person', loadUser, function(req, res) {
if (!err) {
res.send(req.user.info);
}
else {
res.redirect('/');
}
})
如何设置loadUser
中间件,以便如果:person
参数等于数组中的某个名称,则页面将加载其各自的信息。但是,如果输入的:person
不在数组中,则只会重定向到另一个页面。
到目前为止我所拥有的是:
function loadUser(req, res, next){
for(var i= 0; i < users.length; i++) {
if ( req.params.gg == users[i].id ) {
req.user = users[i];
}
}
next();
}
但我不知道如何添加错误部分和next()
部分。
答案 0 :(得分:1)
如果在Error
数组中找不到路由参数next
,则创建一个新的:person
对象并将其传递给users
回调
function loadUser(req, res, next) {
var person = req.params.person;
for(var i= 0, len = users.length; i < len; i++) {
if ( person === users[i].name ) {
req.user = users[i];
}
}
if(!req.user) next(new Error('No such user ' + person));
else next();
}
Connect中使用的错误处理程序中间件必须使用4个参数,也就是说,它必须具有4个arity。实际上,使用if(err)
显式检查错误不是必需的。错误处理程序中间件,因为Express仅在发生错误时才调用它。
var sendInfo = function (req, res, next) {
res.send(req.user.info);
}
app.get('/test/:person', loadUser, sendInfo, function(err, req, res, next) {
if (err) {
res.redirect('/');
}
});