我试图在我的代码中找到错误,其他主题都没有。
有app.js代码,其中包含来自Express模块的get
方法:
app.get('/notes', notesController.all);
有notesController.js代码,导出到app.js create
方法:
exports.all = function (req, res) {
Notes.all(function(err, docs){
if(err){
console.log(err);
return res.sendStatus(500);
}
res.send(docs);
})
};
在model
此代码:
exports.all = function (cb) {
db.get().collection('notes').find().toArray(function (err, docs) {
cb(err,docs);
})
};
应用程序崩溃时出现此错误:
process.nextTick(function() { throw err; }); ^
错误:发送后无法设置标头。 在ServerResponse.OutgoingMessage.setHeader(_http_outgoing.js:357:11) 在ServerResponse.header(O:\ OGPI6 \ node_modules \ express \ lib \ response.js:725:10) 在ServerResponse.json(O:\ OGPI6 \ node_modules \ express \ lib \ response.js:253:10) 在ServerResponse.send(O:\ OGPI6 \ node_modules \ express \ lib \ response.js:158:21) 在O:\ OGPI6 \ controllers \ notes.js:9:13 在O:\ OGPI6 \ models \ notes.js:6:9 在handleCallback(O:\ OGPI6 \ node_modules \ mongodb \ lib \ utils.js:120:56) 在O:\ OGPI6 \ node_modules \ mongodb \ lib \ cursor.js:860:16 at handleCallback(O:\ OGPI6 \ node_modules \ mongodb-core \ lib \ cursor.js:171:5) at setCursorDeadAndNotified(O:\ OGPI6 \ node_modules \ mongodb-core \ lib \ cursor.js:505:3)
在我看来,回调函数中只有“controller”错误:
if(err){
console.log(err);
return res.sendStatus(500);
}
res.send(docs);
但我认为当发生错误时它必须终止函数并返回sendStatus(500)
,但在控制台中记录错误后它会尝试返回res.send(docs)
,然后应用程序崩溃,因为它正在发送第二个标题。它看起来很好,但不起作用。任何人都可以指出我失败了吗?
答案 0 :(得分:2)
使用" next"中间件中的参数使表达知道该中间件的目的已经完成,并且不再需要执行代码。
exports.all = function (req, res, next) {
Notes.all(function(err, docs){
if(err){
console.log(err);
res.sendStatus(500);
return next();
}
res.send(docs);
})
};
返回后执行代码可能是由于异步性质。
您也可以使用else阻止。
exports.all = function (req, res, next) {
Notes.all(function(err, docs){
if(err){
console.log(err);
res.sendStatus(500);
}
else res.send(docs);
})
};
答案 1 :(得分:0)
将代码更改为
if(err){
console.log(err);
return res.status(500).send(err);
}
res.send(docs);