首页 > 解决方案 > 错误 [ERR_HTTP_HEADERS_SENT]:在以快递方式发送到客户端后无法设置标头

问题描述

我正在尝试在 MongoDB 中保存详细信息,并且正在使用“return”语句返回响应,但出现错误。有人可以帮我吗?我也尝试过使用 async-await 但没有运气!

const votedOnSolModel = require("../../models/votedOnSolModel");
const userProfileModel = require("../../models/userProfileModel");
const solutionModel = require("../../models/solutionModel");
exports.votingPost = async (req, res, next) => {
  userProfileModel.findOne({ githubId: req.body.githubId }, (err, doc) => {
    if (err) return res.status(500).send(err);

    if (doc) {
      var newVote = new votedOnSolModel({
        publicAddress: req.body.publicAddress,
        amountStaked: req.body.amountStaked,
        timeStamp: req.body.timeStamp,
        weightage: req.body.amountStaked,
        amountToBeReturned: 0,
        solutionId: req.body.solutionId,
        voterId: doc.voterId,
      });
      newVote
        .save()
        .then((newdoc) => {
          userProfileModel
            .updateOne(
              {
                githubId: req.body.githubId,
              },
              { $push: { votedOn: newdoc._id } }
            )
            .then((result) => {
              solutionModel
                .updateOne(
                  {
                    _id: req.body.solutionId,
                  },
                  {
                    $push: { votedOn: newdoc._id },
                  }
                )
                .then((finalResult) => {
                  res.sendStatus(201);
                })
                .catch((error) => {
                  return res.status(400).send(error);
                });
            })
            .catch((error) => {
              return res.status(400).send(error);
            });
        })
        .catch((error) => {
          return res.status(400).send(error);
        });
    }
  });
};

这是控制器。

const express = require("express");
const router = express.Router();

const { votingPost } = require("../controller/voting/votingPost");
const { voterDetailPost } = require("../controller/voting/voterDetailsPost");

router.post("/save", votingPost);
router.post("/voterDetails", voterDetailPost);

module.exports = router;

这是路由器

我的请求正文

{“publicAddress”:“asdas”,“amountStaked”:2,“timeStamp”:1233,“solutionId”:“rp1.com”,“githubId”:“akp111”
}

请建议我该怎么做

标签: node.jsmongodbexpressmongooseserver

解决方案


你调用send并且status总是在同一个响应对象上。显然,这是行不通的。将调试语句添加到您的调用中,以查看您尝试调用的位置sendstatus第二次调用。

我会做(err, doc) => {}一个异步函数,遵循逻辑会容易得多。如果您坚持回调,为了清楚起见,我会重写如下,因为res.send()没有返回值:

   res.status(400).send(error);
   return;

推荐阅读