2017-04-24 103 views
1

我有一些基本的身份驗證在使用時拋出控制檯錯誤的路線。無法設置標題

Error: Can't set headers after they are sent. 
    at ServerResponse.OutgoingMessage.setHeader (_http_outgoing.js:356:11) 
    at ServerResponse.header 

只有當「if」語句爲真(if語句內的代碼運行)時纔會發生。當它不運行時,我沒有收到任何錯誤,並且「主頁」視圖呈現沒有錯誤。

routes.get('/scan', (req, res, next) => { 
    const orderID = req.query.order; 
    const token = req.query.token; 

    if (!hasAccess(token)) 
     res.status(401).send('Unauthorized'); 

    res.render('home', {order}); 
}); 
+1

更新你的代碼'res.status(401)後返回。發送(「擅自」);'不然你會試圖發送一個響應和渲染頁面的每時間。 – Ken

回答

1

您應該將res.status(401).send('Unauthorized');後添加return;以避免發送重複的響應。

2

當您嘗試響應您的請求一次以上時,會引發此錯誤。

爲了避免這種錯誤,發送響應時應該爲return,所以函數不會繼續。

你的情況:

routes.get('/scan', (req, res, next) => { 
    const orderID = req.query.order; 
    const token = req.query.token; 

    if(!hasAccess(token)) 
    return res.status(401).send('Unauthorized'); 
    return res.render('home', {order}); 
}); 
+0

在函數結尾返回('return res.render(...)')沒有用,可以省略。 – mscdex

+1

我同意,但這是常見的做法,只是習慣或在某些編譯器上使用尾部調用優化 –

+0

缺失);在routes.get()調用結束時。 – Ken