我对一种用法非常困惑:
在路线档案中:
app.param('userId', users.load);
users.load函数:
exports.load = function (req, res, next, id) {
var options = {
criteria: { _id : id }
};
User.load(options, function (err, user) {
if (err) return next(err);
if (!user) return next(new Error('Failed to load User ' + id));
req.profile = user;
next();
});
};
这里,路由应该有userId来响应,但为什么作者在这里使用req.profile
。 profile
不是财产。
任何人都可以提供帮助吗?
感谢。
答案 0 :(得分:1)
代码的作用是:对于具有userId
参数的路由(即类似于此的路由:/user/:userId
),Express将调用load()
函数< em>在之前调用路由处理程序。
load函数从数据库加载属于userId的用户配置文件,并将其作为新创建的属性req
添加到req.profile
。
.profile
属性名称由作者任意命名,并演示了向req
(或res
添加属性完全有效的事实,但惯例是将这些属性添加到req
)。
在路由处理程序中,您可以使用req.profile
。它基本上是一种将数据从中间件和app.param()
实现传播到路由处理的其他部分的方式。