如何解决“TypeError:callback.apply不是函数”?

时间:2017-03-21 17:05:25

标签: javascript node.js mongodb mongoose

我正在做一个大学项目,我已经阅读了关于我的问题的每篇文章,但我还没有找到解决方案。也许你可以帮助我。

代码如下:

viewerObj.update({_id: currentIDViewerVar} , {minutesWatched: 5},{upsert:true}  , function (err,result) {
                                            
          if (err) throw err;
          console.log("Viewer " + userNameVar + " gespeichert");
          console.log("minsWatched" +minsWatched);
});

我收到以下错误。我看不出我做错了什么。

events.js:160
      throw er; // Unhandled 'error' event
      ^

TypeError: callback.apply is not a function
    at C:\Users\picco\Desktop\TwitchWatcher_v19\TwitchWatcher\node_modules\mongoose\lib\model.js:3388:16
    at Query.callback (C:\Users\picco\Desktop\TwitchWatcher_v19\TwitchWatcher\node_modules\mongoose\lib\query.js:2185:9)
    at C:\Users\picco\Desktop\TwitchWatcher_v19\TwitchWatcher\node_modules\mongoose\node_modules\kareem\index.js:259:21
    at C:\Users\picco\Desktop\TwitchWatcher_v19\TwitchWatcher\node_modules\mongoose\node_modules\kareem\index.js:127:16
    at _combinedTickCallback (internal/process/next_tick.js:67:7)
    at process._tickCallback (internal/process/next_tick.js:98:9)

Process finished with exit code 1

提前谢谢!

3 个答案:

答案 0 :(得分:2)

您使用的论据太多了。

改变这个:

viewerObj.update({_id: currentIDViewerVar} , {minutesWatched: 5},{upsert:true}  , function (err,result) {

      if (err) throw err;
      console.log("Viewer " + userNameVar + " gespeichert");
      console.log("minsWatched" +minsWatched);
});

到此:

viewerObj.update({_id: currentIDViewerVar, minutesWatched: 5}, {upsert:true}, function (err,result) {

      if (err) throw err;
      console.log("Viewer " + userNameVar + " gespeichert");
      console.log("minsWatched" +minsWatched);
});

参见文档:

答案 1 :(得分:2)

如果您要更新mongoose文档,则不要将查询作为第一个参数传递。

请参阅Docs for Document#update

因此,这种更新方法需要3个参数 第三个是回调,你传入一个对象({upsert: true}),其中up​​date方法需要回调。这就是你得到callback.apply is not a function的原因。仅仅因为{ upsert: true }不是函数。

答案 2 :(得分:0)

在我的情况下,我使用猫鼬的聚合方法(5.1.2)面临这个问题。相同的代码正在处理< 4.9但是在升级到5时被破坏了。

我刚在查询中添加了大写字母

User.aggregate([{
            $match: {
                isDeleted: 0,
                isActive: 1,
                _id: Mongoose.Types.ObjectId(userId)
            }
        }, {

            $project: {
                claps: 1,
                showIcon: { $cond: [{ $gt: [{ $size: "$userBadges" }, 0] }, 1, 0] },
            }
        }])
            .exec(function (err, data) {});

`