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