【问题标题】:Mongoose 500 error after inserting the data插入数据后Mongoose 500错误
【发布时间】:2016-04-08 12:36:47
【问题描述】:

当我发布表单时,我在控制台上收到 500 错误,上面写着:POST/items/sprinkler 500 angular.js:10766

在我的节点控制台中,错误显示:Error: Failed to lookup view "error" in views directory

但我可以将数据插入我的数据库。之后,这不会运行-exec(function(err, item)。我该怎么做?

mainapp/routes/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
    });
  });
}

【问题讨论】:

  • 您的服务器正在尝试呈现错误页面(可能是因为您的处理程序中出现错误,也可能是验证问题?),但由于缺少错误模板而无法呈现。您应该修复您的 Express 应用程序的错误处理程序,或者将其删除,这样它会导致您的服务器因实际错误而崩溃。
  • 我试着写这个'if (err) { console.log(err); res.send(500); } 其他 { 控制台.log(保存); res.send(保存); }` 但它显示相同。我还在视图/500 中添加了一个错误页面,但它再次显示相同的错误。
  • 错误发生在该代码之前。我说的是全局 Express 错误处理程序,记录在 here
  • 当我刷新页面时,保存的数据会按原样返回到我的视图中。我发帖时仍然出错。
  • 修复您的快速错误处理程序,以便您可以收到错误消息。在那之前,没有人可以帮助你。

标签: angularjs node.js mongodb express mongoose


【解决方案1】:

最终,错误是由这个引起的:

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

【讨论】:

  • 你是 100% 正确的。而已。我使用了回调Item.create(req.body, function(err, item) { ... });。我也可以在前端获取数据。我正在做 res.send (错误处理部分),但是当我启动服务器时,它会因错误而关闭。你的方法很完美。也感谢你教我错误处理。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-20
  • 2015-05-31
  • 1970-01-01
  • 2014-06-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多