Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/457.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.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 Node.js,Express:发送到客户端后无法设置头_Javascript_Node.js_Express_Mongoose - Fatal编程技术网

Javascript Node.js,Express:发送到客户端后无法设置头

Javascript Node.js,Express:发送到客户端后无法设置头,javascript,node.js,express,mongoose,Javascript,Node.js,Express,Mongoose,首先,我阅读了所有其他StackOverflow答案和GitHub问题,但似乎没有一个解决了我的问题。使用以下代码(其中一些已弃用,很抱歉代码太脏): 我尝试添加return和next语句,但没有任何效果。 这有助于理解问题: 在之前发送响应,然后再次尝试发送响应时,会发生此错误。为此,您必须检查是否有任何代码发送您的响应两次。有时这是由于nodej的异步行为造成的。有时,一个进程将处于事件循环中,我们发送响应,当它完成执行时,将再次发送响应。因此,您可以使用回调或异步等待来等待执行 PP.S

首先,我阅读了所有其他StackOverflow答案和GitHub问题,但似乎没有一个解决了我的问题。使用以下代码(其中一些已弃用,很抱歉代码太脏):

我尝试添加return和next语句,但没有任何效果。 这有助于理解问题:

在之前发送响应,然后再次尝试发送响应时,会发生此错误。为此,您必须检查是否有任何代码发送您的响应两次。有时这是由于nodej的异步行为造成的。有时,一个进程将处于事件循环中,我们发送响应,当它完成执行时,将再次发送响应。因此,您可以使用回调或异步等待来等待执行

PP.S 在遵循答案中给出的代码示例之后,我发现了这个错误(它更类似于现在的链接问题):


当代码多次尝试发送响应时,会发生此错误, 这是你的工作岗位API代码

 app.post('/users/:id', verifyToken, function (req, res){
  jwt2.verify(req.token, 'secretkey', (err, auth) =>{
    if(err){
      res.sendStatus(403);

    } else {
      res.json({
        message: 'User created (in theory)',
        auth
      })
    }
  })
});
只需从该API中删除额外的响应代码

您必须删除verify token函数中的next()键

function verifyToken(req, res, next){
  // Get auth header value
  const bearerHeader = req.headers['authorization'];
  // Check if bearer is undefined
  if(typeof bearerHeader !== 'undefined'){
    // Split at the space
    const bearer = bearerHeader.split(' ');
    // Get token from array
    const bearerToken = bearer[1];
    // Set the token
    req.token = bearerToken;
    // Next middleware
    next();
  }
    else{
      // Forbidden
      res.sendStatus(403);
    }
  }
在你的
app.post('/users/:id'..)中使用此代码更新验证功能

你将发送两次响应。因此,您第二次收到错误,因为响应已经发送

还有一个错误:
authData
未定义,因为它将是
auth

    app.post('/users/:id', verifyToken, function (req, res){
      jwt2.verify(req.token, 'secretkey', (err, auth) => {
        if(err){
          res.sendStatus(403);
        } else {
          res.json({
            message: 'User created (in theory)',
            auth
          })
        }
      })
    });

修改后仍然崩溃…非常确定VerifyToken函数中出现了错误,但无法确定。仍然给出相同的错误吗?是的,相同的错误现在我获得了身份验证(以前它丢失),并且应用程序没有崩溃,但是我仍然得到了错误。我尝试删除if子句之后的res.json,但没有任何错误avail@SuleymanSah我得到了不同的跟踪,我的代码也不同。我的跟踪中没有SetHeader错误。更新:现在我的跟踪中实际上有一个SetHeader错误,但解决方案仍然与链接问题明显不同。
 app.post('/users/:id', verifyToken, function (req, res){
  jwt2.verify(req.token, 'secretkey', (err, auth) =>{
    if(err){
      res.sendStatus(403);

    } else {
      res.json({
        message: 'User created (in theory)',
        auth
      })
    }
  })
});
function verifyToken(req, res, next){
  // Get auth header value
  const bearerHeader = req.headers['authorization'];
  // Check if bearer is undefined
  if(typeof bearerHeader !== 'undefined'){
    // Split at the space
    const bearer = bearerHeader.split(' ');
    // Get token from array
    const bearerToken = bearer[1];
    // Set the token
    req.token = bearerToken;
    // Next middleware
    next();
  }
    else{
      // Forbidden
      res.sendStatus(403);
    }
  }
    app.post('/users/:id', verifyToken, function (req, res){
      jwt2.verify(req.token, 'secretkey', (err, auth) => {
        if(err){
          res.sendStatus(403);
        } else {
          res.json({
            message: 'User created (in theory)',
            auth
          })
        }
      })
    });