我已经使用如下所示的路由器设置了NodeJS + Express Server:
app.route('/clients/:clientId)
.get(users.ensureAuthenticated, clients.read)
.put(users.ensureAuthenticated, clients.hasAuthorization, clients.update)
.delete(users.ensureAuthenticated, clients.hasAuthorization, clients.delete);
app.param('clientId', clients.clientByID);
我的问题是users.ensureAuthenticated
使用当前用户req
填充req.user
参数。
基本上这样做:req.user = payload.sub;
(还有一些其他背景资料)
然后req.user
可用于以下功能,例如clients.update
,但不在clients.clientByID
。{/ p>
我知道我可以再次在users.ensureAuthenticated
中执行clients.clientByID
,但这会执行两次代码并在服务器上额外加载,对吧?我猜必须有另一种方式,但我无法在快递文档中找到任何内容。
我想知道如何访问req.user
中的clients.clientByID
而不执行users.ensureAuthenticated
两次的代码。
答案 0 :(得分:1)
根据您的问题,我假设您希望在执行users.ensureAuthenticated
之前执行clients.clientByID
。这可以通过使用app.use
功能来实现。 app.use
处理程序将在app.param
和app.route
处理程序之前执行。
例如:
var express = require('express');
var app = express();
app.use('/user', function(req, res, next) {
console.log('First! Time to do some authentication!');
next();
});
app.param('id', function(req, res, next, id) {
console.log('Second! Now we can lookup the actual user.');
next();
});
app.get('/user/:id', function(req, res, next) {
console.log('Third! Here we do all our other stuff.');
next();
});
app.listen(3000, function() {
});