2016-08-12 46 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

相关问题