gpt4 book ai didi

methods - Meteor.methods() 回调错误

转载 作者:行者123 更新时间:2023-12-04 22:47:12 27 4
gpt4 key购买 nike

我在 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/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com