methods - Meteor.methods() 回调错误

标签 methods callback meteor

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

客户端 :

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

服务器端 :
  Meteor.methods({
      logUser : function(mycallback){
        mycallback("myString");
      }
  });

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

“未定义不是函数”

最佳答案

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

为什么呢 ?

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

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

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

    引用 Meteor 文档 : ( http://docs.meteor.com/#meteor_call )

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

    所以你在这里做错了(无论如何,Session 在服务器上不可用),我认为你应该重新考虑你想要实现的任何方法。

    关于methods - Meteor.methods() 回调错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19755637/

    相关文章:

    javascript - 带铁路由器的 meteor 休息 api

    javascript - 获取匹配日期的 MongoDB 项目

    总是被调用的 PHP 方法

    c++ - 没有可行的重载 '=' 用于将 std::function 回调分配为成员函数

    node.js reqest.js/cheerio.js 返回空 json

    c - 是否可以将回调函数与 sqlite prepare v2() 结合使用

    javascript - 当该元素的值更改时,是否会自动重新执行从元素读取值的 Meteor Helper?

    java - 从一个方法调用特定变量到主类

    java - 将值设置为对象数组

    java - OOP 如何将击败的敌人的钱添加到主角的包里?