Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.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
Meteor.methods()回调错误_Methods_Callback_Meteor - Fatal编程技术网

Meteor.methods()回调错误

Meteor.methods()回调错误,methods,callback,meteor,Methods,Callback,Meteor,Meteor.js上的那段代码出错了: 客户端: Meteor.call("logUser", function(myvar){ console.log("le chat client : "+myvar) ; Session.set("chatId", myvar); }); Meteor.call("logUser", function(error , result){ if(error) c

Meteor.js上的那段代码出错了:

客户端:

      Meteor.call("logUser", function(myvar){
        console.log("le chat client : "+myvar) ;
        Session.set("chatId", myvar);
     });  
    Meteor.call("logUser", function(error , result){
      if(error)
          console.log(error.reason);
      else
          console.log(result);

    });
服务器端:

  Meteor.methods({
      logUser : function(mycallback){
        mycallback("myString");
      }
  });
 Meteor.methods({
      logUser : function(){
        return "myString";
      }
  });
我真的不明白为什么它不起作用,该方法触发得很好,但调用“mycallback”时代码会中断:


“Undefined不是函数”

您不能将函数作为参数传递给Meteor方法

为什么会这样

  • 出于安全考虑,您是否知道基本上您是在尝试让客户端在服务器端上下文中执行任何代码?您不能信任客户端,可能有人使用Meteor.call(“logUser”,function(){破坏服务器的恶意代码});在浏览器控制台中,用一行代码杀死服务器

  • 我猜Meteor.call的参数是使用JSON格式序列化的,JSON格式不允许函数,所以这在技术上是不可能的。您可以将函数作为字符串传递并在服务器上求值,但这将是一个可怕的错误

这里发生的事情是,您传递给Meteor.call的函数实际上被视为在服务器上异步执行该方法后在客户端上执行的回调,因此,这就是为什么您会误认为该方法触发良好,而事实显然并非如此

所以meteor方法根本没有传递任何参数,这就是为什么“回调”在其代码中没有定义

引用流星文件:()

如果包含回调函数作为最后一个参数(由于函数不可序列化,因此不能作为该方法的参数),则该方法将异步运行

因此,您在这里做了一些错误的事情(无论如何,会话在服务器上都不可用),我认为您应该重新考虑尝试实现任何目标的方法。

解决方案:

客户端:

      Meteor.call("logUser", function(myvar){
        console.log("le chat client : "+myvar) ;
        Session.set("chatId", myvar);
     });  
    Meteor.call("logUser", function(error , result){
      if(error)
          console.log(error.reason);
      else
          console.log(result);

    });
服务器端:

  Meteor.methods({
      logUser : function(mycallback){
        mycallback("myString");
      }
  });
 Meteor.methods({
      logUser : function(){
        return "myString";
      }
  });

几分钟前我找到了解决方案,谢谢你的帮助!