我在使用一个简单的 todo MEAN 应用程序时遇到一个奇怪的问题,我正在使用远程数据库,每当我更新或删除记录(不总是但主要是)时,它会抛出错误:
events.js:160
throw er; // Unhandled 'error' event
^
Error: Can't set headers after they are sent.
at ServerResponse.OutgoingMessage.setHeader (_http_outgoing.js:357:11)
at ServerResponse.header (E:\Examples\mean-stack-todo\node_modules\express\lib\response.js:730:10)
at ServerResponse.json (E:\Examples\mean-stack-todo\node_modules\express\lib\response.js:253:10)
at E:\Examples\mean-stack-todo\app\routes.js:11:13
at E:\Examples\mean-stack-todo\node_modules\mongoose\lib\model.js:3800:16
at E:\Examples\mean-stack-todo\node_modules\kareem\index.js:220:48
at E:\Examples\mean-stack-todo\node_modules\kareem\index.js:131:16
at _combinedTickCallback (internal/process/next_tick.js:73:7)
at process._tickCallback (internal/process/next_tick.js:104:9)
POST 和 DELETE 发生此错误,其中实现是:
app.post('/api/todos', function (req, res) {
// create a todo, information comes from AJAX request from Angular
Todo.create({
text: req.body.text,
done: false
}, function (err, todo) {
if (err) {
res.send(err);
}
// get and return all the todos after you create another
getTodos(res);
});
});
并删除:
// delete a todo
app.delete('/api/todos/:todo_id', function (req, res) {
Todo.remove({
_id: req.params.todo_id
}, function (err, todo) {
if (err) {
res.send(err);
}
getTodos(res);
});
});
我不知道错误的根源在哪里。
错误:发送后无法设置标头
这意味着您发送了两次或更多次回复,这是不可能的。
出错时,你必须使用 return 否则 getTodos 函数将被调用,我猜你响应两次,第一次出错,第二次在 getTodos 函数中。
// delete a todo
app.delete('/api/todos/:todo_id', function (req, res) {
Todo.remove({
_id: req.params.todo_id
}, function (err, todo) {
if (err) {
// added the return
return res.send(err);
}
getTodos(res);
});
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句