2015-10-21 90 views
3

我有,看起來像這樣的路由器+的NodeJS Express服務器設置:填寫的NodeJS其他功能「請求」

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

我知道我可以在clients.clientByID中再次執行users.ensureAuthenticated,但是這會執行代碼兩次並且會在服務器上產生額外的負載,對吧?我想一定有另外一種方法,但是在express的文檔中我找不到任何東西。

我想知道如何在clients.clientByID中訪問req.user,而不是在users.ensureAuthenticated中執行兩次代碼。

+0

它看起來像你需要一箇中間件,對不對? –

+0

讓我知道我的答案是否足夠。 – xaviert

+0

你能不能給那些試圖幫助你的人提供反饋? – xaviert

回答

1

根據你的問題,我假設你想在執行clients.clientByID之前執行users.ensureAuthenticated。這可以通過使用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() { 
}); 
+1

嗨,感謝您的回答,它以這種方式工作,非常感謝。非常簡單的方法。 :) – EinArzt