Javascript Express/node.js可以';t在发送邮件后设置邮件头
我试图通过服务器传递会话api请求,以便使用会话令牌设置httpOnly cookie,但遇到错误,错误如下: 发送邮件后无法设置邮件头 不完全确定这意味着什么,但这是我在express中的拦截器,它侦听到Javascript Express/node.js可以';t在发送邮件后设置邮件头,javascript,node.js,express,request,response,Javascript,Node.js,Express,Request,Response,我试图通过服务器传递会话api请求,以便使用会话令牌设置httpOnly cookie,但遇到错误,错误如下: 发送邮件后无法设置邮件头 不完全确定这意味着什么,但这是我在express中的拦截器,它侦听到/api/sessions端点的帖子,并在成功的场景中设置cookie app.post('/api/sessions', (req, res) => { const url = `${config.API_HOST}/sessions` let apiCall = reques
/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)
})
编辑:我之所以使用管道,是为了能够在我的客户端应用程序中使用期票。从上面的错误消息中,您试图在代码中的某些地方发送两次响应
发送后无法设置标题
表示您的代码在发送前一个响应后试图修改响应标题(可能是为了发送新的响应)
从您的实现中,您正在res.cookie('SESS',data.token,sessionokie)
中调用apiCall
定义中的res
,并在这一行req.pipe(apiCall).pipe(res)
中将apiCall
管道化为res
,第二次修改响应对象。我认为res.cookie
在内部调用res.end
。如果是这种情况,对res
的任何进一步调用或编辑都将抛出您的错误
您应该能够通过删除req.pipe(apiCall).pipe(res)
中的.pipe(res)
部分来修复此问题,只需使用
req.pipe(apiCall)
您可以查看如何在express中设置和发送cookie,以及如何更好地解释错误消息