NodeJS填写" req"来自其他功能

时间:2015-10-21 11:36:54

标签: javascript node.js express

我已经使用如下所示的路由器设置了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两次的代码。

1 个答案:

答案 0 :(得分:1)

根据您的问题,我假设您希望在执行users.ensureAuthenticated之前执行clients.clientByID。这可以通过使用app.use功能来实现。 app.use处理程序将在app.paramapp.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() {
});