2013-01-14 70 views
0

下面的代碼演示瞭如何從中間件登錄req.hash_id。它顯示爲undefined。無論如何,我可以得到這個工作?或者經常使用中間件來解析「:hash」。將.param的req變量傳遞給.use?

app.param("hash",function(req, res, next, id){ 
    req.hash_id = id; 
    return next(); 
}); 

app.use(function(req, res, next){ 
    console.log(req.hash_id); 
    return next(); 
}); 

回答

2

我不認爲你可以使用req.params中間件的功能裏面,因爲它綁定到特定的路線。儘管您可以使用req.query,但您必須以不同的方式編寫路線,例如/user?hash=12345abc。不確定將app.param的值傳遞給app.use

如果你有一個特定結構的路線,像/user/:hash你可以簡單地寫

// that part is fine 
app.param('hash',function(req, res, next, id){ 
    req.hash_id = id; 
    return next(); 
}); 

app.all('/user/:hash', function(req, res, next) { // app.all instead app.use 
    console.log(req.hash_id); 
    next(); // continue to sending an answer or some html 
}); 

// GET /user/steve -> steve 
+0

我想用'app.use()'中間件攔截所有的'app.param之間的呼叫() '和'app.all()'並使用'req.hash_id'變量。但這裏是'undefined'完整的示例:https://gist.github.com/4532510。 – ThomasReggi

+0

這有點棘手。 'app.param'是路由器的一部分。 'req.hash_id'是'undefined',因爲中間件在'router'之前被調用。將'app.use'放在''router'後面將不起作用,因爲路由器是中間件鏈的末端。 – zemirco

+0

是的,我想我現在知道它是如何工作的。我擺脫了'app.param',並解析'app.use'中間件中的'req.url'作爲散列。 – ThomasReggi