Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Express/node.js可以';t在发送邮件后设置邮件头_Javascript_Node.js_Express_Request_Response - Fatal编程技术网

Javascript Express/node.js可以';t在发送邮件后设置邮件头

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请求,以便使用会话令牌设置httpOnly cookie,但遇到错误,错误如下:

发送邮件后无法设置邮件头

不完全确定这意味着什么,但这是我在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)
})

编辑:我之所以使用管道,是为了能够在我的客户端应用程序中使用期票。

从上面的错误消息中,您试图在代码中的某些地方发送两次响应
发送后无法设置标题
表示您的代码在发送前一个响应后试图修改响应标题(可能是为了发送新的响应)

从您的实现中,您正在
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,以及如何更好地解释错误消息