私はmongooseを使用していくつかの文書を読み取り、更新して削除しています。
検索と更新と削除が正常に動作しています。最後のdata.remove();
は削除されず、エラーになります。
私は以下の私のコードでこのエラーを取得しています:nodejs mongooseヒットを削除するエラー:送信後にヘッダーを設定できない
events.js:160
throw er; // Unhandled 'error' event
^
Error: Can't set headers after they are sent.
、それが指している行がある:
res.status(200).json({
success: true
});
コードの最後に。
router.post('/some/route', function (req, res) {
if (req.isLoggedIn()) {
return res.status(403).json({});
}
MyModel.findById(req.user._id,function (err, data) {
if(err || data.rights !== 'super'){
return res.status(403).json({});
}
if(req.body.writer){
Books.update(
{ writer : req.body.id},
{ $set : { writer : req.body.writer} },
function (err) {
if(err){
res.status(500).send(err);
}
else{
res.status(200).send('updated successfully.');
}
}
);
}else{
Books.remove({writer: req.body.id}, function(err){
if (err){ return console.log(err)}
});
}
MetaInfo.findOneAndRemove({_id: req.body.id}, function (err, data) {
console.log(err);
});
Archive.findOne({_id: req.body.id},function (err, data) {
smtpTransporter.sendMail({...}, function (error, response) {
if (error) {
console.log(error);
} else {
console.log("Mail sent");
}
smtpTransporter.close();
});
data.remove();
if (err) {
console.log(err);
return res.status(200).json({
success: false,
message: 'server error',
err: err
});
}
res.status(200).json({
success: true
});
})
});
});
最も可能性の高い問題は、res.status/sendのいずれかがそのステートメントの前に実行されていることです。各res.status文の前にconsole.logを実行して、コードが分岐した文をすべての条件ブロックで追跡できるようにしてください。 –