Node.js 错误[ERR_HTTP_HEADERS_SENT]无法在将头发送到客户端后设置头

Node.js 错误[ERR_HTTP_HEADERS_SENT]无法在将头发送到客户端后设置头,node.js,reactjs,mongodb,mongoose,mern,Node.js,Reactjs,Mongodb,Mongoose,Mern,请帮助,我已经面临这个问题将近3天了,下面是我的后端nodejs代码: 分级模型 at ServerResponse.setHeader (_http_outgoing.js:470:11) at ServerResponse.header (C:\root\node_modules\express\lib\response.js:771:10) at ServerResponse.send (C:\root\node_modules\express\lib\respon

请帮助,我已经面临这个问题将近3天了,下面是我的后端nodejs代码: 分级模型

    at ServerResponse.setHeader (_http_outgoing.js:470:11)
    at ServerResponse.header (C:\root\node_modules\express\lib\response.js:771:10)
    at ServerResponse.send (C:\root\node_modules\express\lib\response.js:170:12)
    at ServerResponse.json (C:\root\node_modules\express\lib\response.js:267:15)
    at ServerResponse.send (C:\root\node_modules\express\lib\response.js:158:21)
    at grade.save (C:\root\route\api\listsData.js:223:32)
    at C:\root\node_modules\mongoose\lib\model.js:4604:16
    at C:\root\node_modules\mongoose\lib\utils.js:268:11
    at $__save.error (C:\root\node_modules\mongoose\lib\model.js:472:16)
    at C:\root\node_modules\kareem\index.js:246:48
    at next (C:\root\node_modules\kareem\index.js:167:27)
    at next (C:\root\node_modules\kareem\index.js:169:9)
    at Kareem.execPost (C:\root\node_modules\kareem\index.js:217:3)
    at _handleWrapError (C:\root\node_modules\kareem\index.js:245:21)
    at C:\root\node_modules\kareem\index.js:272:14
    at _next (C:\root\node_modules\kareem\index.js:94:14)
Emitted 'error' event at:
加坡路线

const mongoose = require('mongoose');

const GradeSchema = new mongoose.Schema({
  name: {
    type: String,
    maxlength: 100,
    required: true,
    unique: true
  }
})

module.exports = Grade = mongoose.model('Grade', GradeSchema);

问题是,当我尝试在post请求中添加等级时,它工作正常,但如果我将空白字段放入并再次发送请求,应用程序将崩溃,并返回上面的错误“发送到客户端后无法设置标题”。谢谢。

一旦发生错误,您需要返回错误响应,否则即使在发生错误后,您的函数仍将继续运行并执行以下代码

  '/add/grade',
  [
    check('name', 'grade name is require')
      .not()
      .isEmpty()
  ],
  auth,
  admin,
  (req, res) => {
    const errors = validationResult(req);
    if (!errors.isEmpty()) res.status(400).send({ errors: errors.array() });

    const grade = new Grade(req.body);

    grade.save((err, doc) => {
      if (err) res.status(400).send({ success: false, err });
      return res.status(200).send({
        success: true,
        grade: doc,
        msg: 'Grade add successfully'
      });
    });
  }
);
因为如果发生错误或任何验证失败,API将发送响应但不会返回,因此函数将继续运行并执行其下的所有其他代码

您应该知道,在HTTP请求中,响应只能发送一次,当函数在错误后再次发送响应时,它会显示在将响应头发送到客户端后无法发送响应头


希望这有帮助。祝您好运:)

一旦发生错误,您需要返回错误响应,否则即使在发生错误后,您的函数仍将继续运行并执行以下代码

  '/add/grade',
  [
    check('name', 'grade name is require')
      .not()
      .isEmpty()
  ],
  auth,
  admin,
  (req, res) => {
    const errors = validationResult(req);
    if (!errors.isEmpty()) res.status(400).send({ errors: errors.array() });

    const grade = new Grade(req.body);

    grade.save((err, doc) => {
      if (err) res.status(400).send({ success: false, err });
      return res.status(200).send({
        success: true,
        grade: doc,
        msg: 'Grade add successfully'
      });
    });
  }
);
因为如果发生错误或任何验证失败,API将发送响应但不会返回,因此函数将继续运行并执行其下的所有其他代码

您应该知道,在HTTP请求中,响应只能发送一次,当函数在错误后再次发送响应时,它会显示在将响应头发送到客户端后无法发送响应头


希望这有帮助。祝您好运:)

如果发送多次会产生错误,则只能向客户端发送一次响应

[ERR_HTTP_HEADERS_SENT]无法在将头发送到服务器后设置头 客户

我也面临着同样的错误。在我的情况下,我发送了两次回复。 1) 在保存用户之前


如果发送多次会产生错误,则只能向客户端发送一次响应

[ERR_HTTP_HEADERS_SENT]无法在将头发送到服务器后设置头 客户

我也面临着同样的错误。在我的情况下,我发送了两次回复。 1) 在保存用户之前


一旦将响应发送到客户端,就不能发送头。因此,在执行所有回调时只发送一次响应。这应该行得通。为了详细说明Raja的评论,您的代码中有多个
res.status()。send
,在某些错误情况下会一个接一个地执行。确保在每个
res.status()之后
返回
。发送
事件以确保只执行其中一个。是的,感谢您的意见,这对我帮助很大。我很感激。一旦响应发送到客户端,您就不能发送标题。因此,在执行所有回调时只发送一次响应。这应该行得通。为了详细说明Raja的评论,您的代码中有多个
res.status()。send
,在某些错误情况下会一个接一个地执行。确保在每个
res.status()之后
返回
。发送
事件以确保只执行其中一个。是的,感谢您的意见,这对我帮助很大。我很感激。是的,谢谢你的意见,我会再检查一遍。我很感激。是的,谢谢你的意见,我会再检查一遍。我很感激。
res.send(user);//<----after removing this statement my problem was fixed.
await user.save().then(result=>{
       return res.send(result);
        
    }).catch(err=>{
        return res.sendStatus(500).send({
            message:err.message|| "some error occured"
        });
        
    })