首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Meteor.methods()回调错误

Meteor.methods()回调错误
EN

Stack Overflow用户
提问于 2013-11-03 17:14:46
回答 2查看 3K关注 0票数 4

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

客户端:

代码语言:javascript
复制
      Meteor.call("logUser", function(myvar){
        console.log("le chat client : "+myvar) ;
        Session.set("chatId", myvar);
     });  

服务器端:

代码语言:javascript
复制
  Meteor.methods({
      logUser : function(mycallback){
        mycallback("myString");
      }
  });

我真的不明白为什么它不起作用,方法被很好地触发,但是当调用"mycallback“时,代码会中断:

“未定义不是函数”

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-03 17:51:26

解决办法:

客户端:

代码语言:javascript
复制
    Meteor.call("logUser", function(error , result){
      if(error)
          console.log(error.reason);
      else
          console.log(result);

    });

服务器端:

代码语言:javascript
复制
 Meteor.methods({
      logUser : function(){
        return "myString";
      }
  });
票数 5
EN

Stack Overflow用户

发布于 2013-11-03 17:39:39

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

为什么是这样?

  • 出于安全考虑,您是否意识到,基本上您试图让客户端执行服务器端上下文中的任何代码?您不能信任客户端,有人可以使用Meteor.call("logUser",function(){破坏服务器的恶意代码});在浏览器控制台中,并在一行代码中杀死您的服务器!
  • 我猜Meteor.call的参数是使用JSON格式序列化的,这不允许函数,因此在技术上这是不可能的。您可以将函数作为字符串传递,并在服务器上对其进行评估,但这将是一个可怕的错误!

这里发生的情况是,传递给Meteor.call的函数实际上被看作是在服务器上执行方法异步执行之后在客户机上执行的回调,所以这就是为什么您被欺骗地认为该方法被很好地触发,而显然不是这样。

因此,meteor方法根本没有传递任何参数,这就是为什么在代码中没有定义“回调”的原因。

引用流星文档:(call)

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

因此,您在这里做了一些错误的事情(会话在服务器上是不可用的),我认为您应该重新考虑您想要达到的目标。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19755637

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档