Node.js 基于数组中字符串的路由

Node.js 基于数组中字符串的路由,node.js,express,Node.js,Express,如果我有如下数组: 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);

如果我有如下数组:

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();
}
函数加载用户(req、res、next){
对于(var i=0;i

但是我不知道如何添加错误部分和
next()
部分。

如果在
users
数组中找不到路由参数
:person
,则创建一个新的
error
对象并将其传递给
next
回调

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

重定向现在对无效的
:person
有效。但是,当它是joe/betty时,页面不会加载。是的,只有当错误传递到
下一个
时才会调用错误处理程序中间件。您还必须附加另一个处理/服务有效用户的中间件(
sendInfo
)。我已经编辑了我的帖子来添加
sendInfo
。这是同一个问题,无效的
:person
重定向工作正常,但是使用有效名称的页面无法加载;chrome在加载时仍处于停滞状态。有效用户缺少对
next
回调的调用。现在应该可以了。
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('/');
   }
});