gpt4 book ai didi

javascript - Express/node.js 发送后无法设置 header

转载 作者:行者123 更新时间:2023-12-02 14:17:23 25 4
gpt4 key购买 nike

我试图通过服务器传输我的 session api 请求,以便使用 session token 设置 httpOnly cookie,并遇到错误:

Can't set headers after they are sent

不完全确定这意味着什么,但这是我的 Express 拦截器,它监听到 /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)
})

编辑:我通过管道传递它的原因是能够在我的客户端应用程序中使用 promise 。

最佳答案

从上面的错误消息来看,您正尝试在代码中的某个位置发送两次响应。 发送后无法设置 header 意味着您的代码正在尝试在发送先前的响应后修改响应 header (可能是为了发送新的响应)。

从您的实现中,您在 apiCall 定义中的 res.cookie('SESS', data.token, sessionCookie) 中调用 res并在此行 req.pipe(apiCall).pipe(res) 中将 apiCall 通过管道传输到 res,再次修改响应对象时间。我认为 res.cookie 在内部调用 res.end 。如果是这种情况,任何进一步的调用或编辑 res 都会抛出您遇到的错误。

您应该能够通过删除 req.pipe(apiCall).pipe(res) 中的 .pipe(res) 部分来解决此问题。只需使用

req.pipe(apiCall)

您可以查看this question关于如何以 Express 方式设置和发送 Cookie 以及 this question更好地解释错误消息。

关于javascript - Express/node.js 发送后无法设置 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38920812/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com