2014-02-05 40 views
0

如果我有這樣一個數組:路線基於字符串數組

var users = [ 
    { name: 'joe', info : 'this man's name is joe'}, 
    { name : 'betty', info : 'this woman's name is betty'} 
]; 

和途徑,如:

app.get('/test/:person', loadUser, function(req, res) { 
    if (!err) { 
     res.send(req.user.info); 
    } 
    else { 
     res.redirect('/'); 
    } 
}) 

如何設置了loadUser中間件因此,如果:person參數是相等到數組中的其中一個名稱,頁面將加載其各自的信息。但是,如果輸入的:person不在數組中,它只是重定向到另一頁。

到目前爲止,我所擁有的是:

function loadUser(req, res, next){ 
    for(var i= 0; i < users.length; i++) { 
    if (req.params.gg == users[i].id) { 
    req.user = users[i];  
    } 
}  
    next(); 
} 

,但我不知道如何添加錯誤部分和next()部分。

回答

1

創建一個新對象Error並把它傳遞給next回調如果路線參數:personusers陣列中沒有找到

function loadUser(req, res, next) { 
    var person = req.params.person; 
    for(var i= 0, len = users.length; i < len; i++) { 
     if (person === users[i].name) { 
     req.user = users[i]; 
     } 
    } 
    if(!req.user) next(new Error('No such user ' + person)); 
    else next(); 
} 

錯誤處理程序的中間件中連接,其中Express使用,必須採取4參數,也就是說,它必須有4個參數。事實上,在錯誤處理中間件中,不需要使用if(err)明確地檢查錯誤,因爲只有在發生錯誤時,Express纔會調用它。

+0

重定向現在在無效的':person'上工作。但是,當它是joe/betty時,頁面不會加載。 –

+0

是的,錯誤處理程序中間件僅在錯誤傳遞給'next'時調用。您還必須附加處理/服務有效用戶的另一箇中間件('sendInfo')。我編輯了我的帖子以添加'sendInfo'。 –

+0

這是同樣的問題,無效':person'完美地重定向工作,但具有有效名稱的頁面無法加載;鉻停留在負載上。 –