通过node.js + socket.io从客户端发送到服务器的JavaScript函数

我希望我的客户端指定一个谓词函数,该函数根据函数的参数返回True或False。 服务器使用此function并将其应用于某些数据。

我提出的解决scheme不是一个很好的解决scheme。 我使用浏览器的function.toString()方法,并在服务器端调用eval()。 除了明显的安全隐患外,它似乎并不干净。

我使用socket.io进行通信,传递对象是完全无缝的。 有没有办法做到这一点的function?

我想你想要的是https://github.com/substack/dnode 。 它根本不使用.toString,但可以让你调用远程函数并以自然的方式获得结果。 看看例子!

编辑:我忘了提及,dnode使用下面的socket.io。

不需要在这里重新发明轮子, Dnode正是你正在寻找的,因为你可以远程调用服务器端的function:

例:

服务器

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