2016-08-12 68 views
0

後才能設置與會話令牌的僅Http餅乾我試圖通過管服務器會話我的API請求,並遇到了一個錯誤說:快遞/ node.js中不能設置頭,他們被送到

不能設置頭後,他們被送到

不完全知道這意味着什麼,但這裏是我的快遞攔截,監聽到崗位/api/sessions端點和成功的場景設置一個cookie

app.post('/api/sessions', (req, res) => { 
    const url = `${config.API_HOST}/sessions` 
    let apiCall = request.post(url, (err, response, body) => { 
    if (!err && response.statusCode === 200) { 
     const data = JSON.parse(body) 
     let sessionCookie = { 
     path: '/', 
     hostOnly: true, 
     secure: true, 
     httpOnly: true 
     } 
     res.cookie('SESS', data.token, sessionCookie) 
    } 
    }) 
    req.pipe(apiCall).pipe(res) 
}) 

編輯:我管它的原因是能夠在我的客戶端應用程序中使用promisses。

回答

1

從上面的錯誤消息,你正試圖發送一個響應兩次在你的代碼中的一些地方。 Can't set headers after they are sent意味着您的代碼正試圖在發送前一個響應之後修改響應頭(可能是爲了發送新的響應)。

從您的實施,在res.cookie('SESS', data.token, sessionCookie)apiCall定義調用res並通過管道將apiCallres在這條線上req.pipe(apiCall).pipe(res),修改這個響應對象的第二時間。我認爲res.cookie內部調用res.end。如果是這種情況,任何進一步的電話或編輯res將拋出你有錯誤。

您應該能夠在req.pipe(apiCall).pipe(res)消除.pipe(res)部分解決這一問題。而只需使用

req.pipe(apiCall) 

您可以在錯誤信息的更好的解釋如何設置檢查this question和快速發送cookie和this question

相關問題