node.js - 错误 [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”
}
请建议我该怎么做
解决方案
你调用send
并且status
总是在同一个响应对象上。显然,这是行不通的。将调试语句添加到您的调用中,以查看您尝试调用的位置send
或status
第二次调用。
我会做(err, doc) => {}
一个异步函数,遵循逻辑会容易得多。如果您坚持回调,为了清楚起见,我会重写如下,因为res.send()
没有返回值:
res.status(400).send(error);
return;