Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb Meteorjs方法调用返回未定义,即使有回调_Mongodb_Meteor - Fatal编程技术网

Mongodb Meteorjs方法调用返回未定义,即使有回调

Mongodb Meteorjs方法调用返回未定义,即使有回调,mongodb,meteor,Mongodb,Meteor,我正在玩meteorjs,很难弄清楚我编写的异步方法到底发生了什么 //in methods.js feedbackTag = new Meteor.Collection('feedbackTag'); Meteor.methods({ searchTag: function (tag, collections) { var result; if(collections.toLowerCase() == 'feedback') { result = feed

我正在玩meteorjs,很难弄清楚我编写的异步方法到底发生了什么

//in methods.js
feedbackTag = new Meteor.Collection('feedbackTag');

Meteor.methods({
  searchTag: function (tag, collections) {
    var result;
    if(collections.toLowerCase() == 'feedback')
    {
    result = feedbackTag.find({tag: tag});
    }
    return result;
  }
});

//in client.js
  Template.executefb.events({
'keyup input#searchFeedback': 
  function(e) { 
    if(e.which == '13')
    {
      var tag = $('#searchFeedback').val();
      Meteor.call('searchTag', tag, 'feedback', function(err, data){
        //err returns:Internal server error, data returns undefined
        console.log(err, data) 
      });
    }
  }
});
我真的不知道为什么它会返回一个内部服务器错误:500。有什么建议吗

提前谢谢

更新:

我意识到在客户端调用时,结果变得“未定义”。但是,如果我直接从客户那里打电话

var result = feedbackTag.find({tag: tag});
它返回我想要的数据

你知道如何从类的方法中得到结果吗?谢谢

尝试将.fetch()添加到服务器上的收款呼叫中。这将返回一个实际的数据数组,否则您将返回一个游标,就像在Meteor.publish()中一样

这可能是导致错误的原因

    Meteor.methods({
      searchTag: function (tag, collections) {
        if(Match.test(tag, String) && Match.test(collections, String) {
          if(collections.toLowerCase() === 'feedback') {
            return feedbackTag.find({tag: tag}).fetch();
          } else {
            console.log("Should have sent feedback, sent " + collections);
          } 
        } else {
          throw new Meteor.Error(400, "Invalid inputs!");
      }
    });
我对您的代码做了一些修改,因为开始抛出您自己的错误是明智的,使用Meteor的新匹配包来验证您的输入也是明智的

方法将返回错误对象或响应对象。通常,接收端会有一个条件,而不是像使用console.log那样尝试同时显示这两个条件

function(err, res) { 
  if(!!err) { 
    alert(err.reason); /* or console.log(err) */
  } else {
    console.log(res);
  }
}
尝试将.fetch()添加到服务器上的收集调用中。这将返回一个实际的数据数组,否则您将返回一个游标,就像在Meteor.publish()中一样

这可能是导致错误的原因

    Meteor.methods({
      searchTag: function (tag, collections) {
        if(Match.test(tag, String) && Match.test(collections, String) {
          if(collections.toLowerCase() === 'feedback') {
            return feedbackTag.find({tag: tag}).fetch();
          } else {
            console.log("Should have sent feedback, sent " + collections);
          } 
        } else {
          throw new Meteor.Error(400, "Invalid inputs!");
      }
    });
我对您的代码做了一些修改,因为开始抛出您自己的错误是明智的,使用Meteor的新匹配包来验证您的输入也是明智的

方法将返回错误对象或响应对象。通常,接收端会有一个条件,而不是像使用console.log那样尝试同时显示这两个条件

function(err, res) { 
  if(!!err) { 
    alert(err.reason); /* or console.log(err) */
  } else {
    console.log(res);
  }
}

你的项目是如何组织的?如果您没有使用Meteor.isServer或Meteor.isClient条件,则必须将这些文件保存在/client和/server文件夹中,才能正常工作(methods.js将变成/server/methods.js,client.js将变成/client/client.js)。您好,很抱歉。这只是代码的一部分。代码确实分别有Meteor.isClient和Meteor.isServer。问题是,当我创建以下方法,并使用Meteor.call和callback调用它时,它总是返回错误500。您的项目是如何构造的?如果您没有使用Meteor.isServer或Meteor.isClient条件,则必须将这些文件保存在/client和/server文件夹中,才能正常工作(methods.js将变成/server/methods.js,client.js将变成/client/client.js)。您好,很抱歉。这只是代码的一部分。代码确实分别有Meteor.isClient和Meteor.isServer。问题是,当我创建以下方法,并使用Meteor.call和callback调用它时,它总是返回错误500。