当我发布表单时,我在控制台上收到500错误:POST/items/sprinkler 500 angular.js:10766
。
在我的节点控制台中,错误显示为:Error: Failed to lookup view "error" in views directory
。
但我可以将数据插入我的数据库。之后,这不会运行 - exec(function(err, item)
。我该怎么做呢?
mainapp /路由/ items.js
router.post('/sprinkler', function(req, res) {
Item.create(req.body).exec(function(err, item) {
console.log("printed")
res.json(item)
});
});
我的错误处理程序看起来像这样(来自express本身):
if (app.get('env') === 'development') {
app.use(function(err, req, res, next) {
res.status(err.status || 500);
console.log("message from error handler:")
res.render('error', {
message: err.message,
error: err
});
});
}
答案 0 :(得分:2)
最终,错误是由此引起的:
Item.create(req.body).exec(...)
.create()
会返回一个承诺,.exec()
不是承诺的有效方法。
要解决此问题,您有两种选择:
// Use a callback
Item.create(req.body, function(err, item) { ... });
// Use the returned promise
Item.create(req.body).then(function(item) { ... }, function(err) { ... });
但是,这会导致错误处理程序无法正常工作的问题,因为缺少模板(如果工作正常,您可能会收到错误,指出.exec
不是函数)。
您可以记录错误,或将其作为JSON(或两者)返回,而不是模板:
if (app.get('env') === 'development') {
app.use(function(err, req, res, next) {
res.status(err.status || 500);
console.error(err.stack);
res.json({
message : err.message,
error : err
});
});
}