【问题标题】:How to pass function to client from Node.js server如何从 Node.js 服务器向客户端传递函数
【发布时间】:2015-03-22 22:54:06
【问题描述】:

全部:

我想做的是这样的:

在节点服务器端:

var fn = function(){
    alert("hello");
}

我想把这个函数发送到客户端(目前用的是AngularJS,不过没关系,只要能解决这个问题),并绑定一个按钮点击事件。所以我可以在单击该按钮时弹出警报窗口。

谢谢

【问题讨论】:

  • 你可能对Socket.io感兴趣。
  • 您需要客户端从节点服务器请求 javascript,然后节点服务器将使用该 javascript(作为字符串)进行响应,然后客户端必须将其挂接到点击事件中。如果您想在客户端中使用它,我不太明白为什么 node.js 中根本存在此功能。你不能只将一个函数从节点传递给客户端,你必须将它作为一个字符串传递,然后解析它。
  • 一个坏主意是做一个fn.toString(),将它发送给客户端,然后评估字符串。
  • @adeneo 就像在客户端定义这个函数一样发送它并与jQuery绑定它
  • @JCOC611 你能给我举个例子吗?谢谢

标签: javascript json angularjs node.js function


【解决方案1】:

这是plunk

// Get this from the server
var textReceived = 'var fn = function(){ alert("hello"); };';

function getFunction(textReceived) {
  eval(textReceived);
  return fn;
}

var f = getFunction(textReceived);

f();

【讨论】:

  • 这没有任何意义,服务器应该只发送数据。请记住,任何 eval() 都存在安全风险。
  • 感谢您的帮助。似乎大多数人不同意将函数发送到客户端,那么您建议使用什么模式来执行此任务?在我的问题帖子中提到过,基本上,我想限制用户可以用来绑定的函数类型
  • 我会在应用程序中预先定义所有允许的功能,因此它们都可以在代码中使用。在服务器端,您只需发送函数名称或某种 id,通过该 id 查找相应的函数并将其绑定到事件。
【解决方案2】:

所以,是这样的:

// Predefined functions
var allowedFunctions = {
    'f1': function () {alert('Called f1');},
    'f2': function () {alert('Called f2');},
    'f3': function () {alert('Called f3');},
};

// This comes from the server
var callThisOne = 'f2';

// Here's how you call it now
allowedFunctions[callThisOne]();

【讨论】:

  • 谢谢,但是这样的话,如果我是用户,我仍然可以尝试获取函数体。
  • 那我不知道。不太清楚你的要求是什么。考虑到您提供的信息,我给了您两个选择。如果都不行,恐怕您将不得不重新考虑您的应用程序的设计。
猜你喜欢
  • 2016-11-28
  • 2016-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-26
  • 2015-09-29
  • 1970-01-01
相关资源
最近更新 更多