我希望我的客户端指定一个谓词函数,该函数根据函数的参数返回True或False。服务器使用此功能并将其应用于某些数据。
我提出的解决方案并不是一个好的解决方案。我使用浏览器的function.toString()方法并在服务器端调用eval()。除了明显的安全隐患外,它似乎并不干净。
我正在使用socket.io进行通信,并且传递对象是完全无缝的。有没有办法为函数执行此操作?
答案 0 :(得分:3)
我认为你想要的是https://github.com/substack/dnode。它根本不使用.toString,但可以让你调用远程函数并以自然的方式获得结果。查看示例!
编辑:我忘了提及,dnode在下面使用了socket.io。
答案 1 :(得分:1)
无需重新发明轮子,Dnode正是您所需要的,因为您可以在服务器 - 客户端之间远程调用函数:
示例:
服务器强>
var express = require('express');
var app = express.createServer();
app.use(express.static(__dirname));
app.listen(8080);
console.log('http://localhost:8080/');
// then just pass the server app handle to .listen()!
var dnode = require('dnode');
var server = dnode({
zing : function (n, cb) { cb(n * 100) }
});
server.listen(app);
<强>客户端强>
...
window.onload = function () {
DNode.connect(function (remote) {
remote.zing(66, function (n) {
document.getElementById('result').innerHTML = n;
});
});
};
在此处查看更多示例:https://github.com/substack/dnode/tree/master/examples
关于DNode的好教程:http://substack.net/posts/85e1bd/DNode-Asynchronous-Remote-Method-Invocation-for-Node-js-and-the-Browser