【问题标题】:Mongoose query doesn't return an errorMongoose 查询不返回错误
【发布时间】:2014-12-04 05:57:51
【问题描述】:

我在搞乱猫鼬,我只是想返回我的集合中的一个对象(据我了解,这相当于 SQL 表中的一行)。

在我正在观看的视频中,它说来自 mongoose 的所有回调都返回错误和结果,但我只能返回结果而不是错误(记录为未定义),即使我强制出错也没有任何反应。

当我遇到错误时如何发现?

这是我的代码。

app = require("../server")
dashboard = require("../models/dashboard")

app.get('/request', (req, res)->
  dashboard.users.find({}).exec().then (users, err) ->
    console.log err
    res.send users
)

无论我如何命名,第二个参数总是未定义。这也是用coffeescript写的,我下面会有一个javascript版本

var app, dashboard;
app = require("../server");
dashboard = require("../models/dashboard");
app.get('/request', function(req, res) {
  return dashboard.users.find({}).exec().then(function(users, err) {
    console.log(err);
    return res.send(users);
  });
});

【问题讨论】:

    标签: javascript node.js mongodb coffeescript mongoose


    【解决方案1】:

    传递给回调的 first 参数是错误:

    dashboard.users.find({}).exec().then (err, users) ->
      etc...
    

    别介意我的第一个答案,我只是注意到您使用的是 Promise,它与“常规”回调的工作方式不同。

    对于常规回调,传递的第一个参数始终是错误值(或null,当没有发生错误时),随后的参数是结果参数(通常只有一个,有时不止一个)。

    Promise 的工作方式不同,有两个功能:

    .then(
      function(results) { ... },
      function(err) { ... }
    )
    

    当操作(在本例中为find)成功时将调用第一个函数。发生错误时将调用第二个函数。

    【讨论】:

    • 即使我反转它,无论我做什么,第二个参数都是未定义的,如果第一个参数是错误的,为什么它会返回我的结果呢?
    • @grasshopper 如果第二个参数始终未定义,那么“为什么它返回我的结果”是什么意思?这些说法似乎相互矛盾。
    • 它返回查询的结果,所以我没有收到错误消息,而是得到了我的集合中的所有内容
    • @grasshopper 为什么会发生错误?
    • 我预计会出现错误,因为就像您说的那样,错误是 第一个参数,所以它应该返回“null”,而 第二个参数应该返回函数成功时的查询结果。但这不是发生的事情,无论我如何命名第一个参数,它都会返回我的查询结果。
    猜你喜欢
    • 1970-01-01
    • 2019-08-29
    • 1970-01-01
    • 2018-06-20
    • 2018-05-22
    • 2018-06-12
    • 2018-07-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多