插入数据后出现Mongoose 500错误

时间:2016-01-04 20:04:59

标签: angularjs node.js mongodb express mongoose

当我发布表单时,我在控制台上收到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
    });
  });
}

1 个答案:

答案 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
    });
  });
}