使用node.js + socket.io从客户端向服务器发送JavaScript函数

时间:2011-12-20 05:34:02

标签: node.js socket.io

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

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

我正在使用socket.io进行通信,并且传递对象是完全无缝的。有没有办法为函数执行此操作?

2 个答案:

答案 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