【问题标题】:mongo/node TypeError: callback is not a function on querymongo/node TypeError:回调不是查询中的函数
【发布时间】:2016-04-30 05:06:28
【问题描述】:

我正在尝试确定某个文档是否存在于集合中。如果文档存在,我希望将属性“unread = false”添加到对象。如果它不存在,我希望插入文档并将“unread = true”添加到对象中。

咖啡脚本中的代码如下:

functionxyz = (db, uid, events, done) ->
async.each events, (eventobj) ->
    if db.Event.find(eventobj).count() > 0
        eventobj.unread = false
    else
        db.Event.insert eventobj
        eventobj.unread = true
done null, events

我收到的错误是

/Users/owner/Desktop/coding challenge/repo/node_modules/mongodb/lib/mongodb/connection/base.js:246
        throw message;      
        ^

TypeError: callback is not a function
  at /Users/owner/Desktop/coding challenge/repo/node_modules/mongodb/lib/mongodb/collection/commands.js:55:5
  at /Users/owner/Desktop/coding challenge/repo/node_modules/mongodb/lib/mongodb/db.js:1197:7
  at /Users/owner/Desktop/coding challenge/repo/node_modules/mongodb/lib/mongodb/db.js:1905:9
  at Server.Base._callHandler (/Users/owner/Desktop/coding challenge/repo/node_modules/mongodb/lib/mongodb/connection/base.js:453:41)
  at /Users/owner/Desktop/coding challenge/repo/node_modules/mongodb/lib/mongodb/connection/server.js:488:18
  at [object Object].MongoReply.parseBody (/Users/owner/Desktop/coding challenge/repo/node_modules/mongodb/lib/mongodb/responses/mongo_reply.js:68:5)
  at [object Object].<anonymous> (/Users/owner/Desktop/coding challenge/repo/node_modules/mongodb/lib/mongodb/connection/server.js:446:20)
  at emitOne (events.js:77:13)
  at [object Object].emit (events.js:169:7)
  at [object Object].<anonymous> (/Users/owner/Deskto

有人可以向我解释发生此错误的原因以及可能的解决方案吗?

【问题讨论】:

    标签: node.js mongodb express coffeescript


    【解决方案1】:

    MongoDB Native Driver for Node 遵循 Node.js 的异步函数约定,即每个方法都接收一个回调函数作为最后一个参数。所以你的函数应该改写为:而不是db.collection.find(query).count()

    db.collection.find(query).count( function(err, count){ // do stuff here } 
    

    参数count 捕获您的查询结果。

    您还可以将函数简化为db.collection.count(query, function(err, count){}

    您的插入函数也应遵循相同的约定,使用function(err, res){} 形式的回调函数作为最后一个参数。

    我建议您查看MongoDB Native Driver Docs 了解更多信息。

    编辑以在 CoffeeScript 中举例: 这是用 CoffeeScript 语法重写的函数。

    db.Event.count(eventobj, (err, count) ->
        // do stuff
    

    【讨论】:

      猜你喜欢
      • 2022-10-16
      • 1970-01-01
      • 2018-01-22
      • 2018-06-05
      • 1970-01-01
      • 1970-01-01
      • 2018-07-03
      • 2021-05-02
      相关资源
      最近更新 更多