2011-12-20 16 views
1

クライアントに、関数の引数に基づいてTrueまたはFalseを返す述語関数を指定します。サーバーはこの機能を使用して、それをいくつかのデータに適用します。node.js + socket.ioを使用してクライアントからサーバーにJavaScript関数を送信する

私が思いついた解決策は素晴らしいものではありません。私はブラウザのfunction.toString()メソッドを使い、サーバー側でeval()を呼び出します。明白なセキュリティの影響を除いて、それはきれいに見えません。

私は通信にsocket.ioを使用しています。オブジェクトを渡すことは完全にシームレスです。関数のためにこれを行う方法はありますか?

答えて

3

あなたが望むのはhttps://github.com/substack/dnodeだと思います。 .toStringはまったく使用されませんが、リモート関数を呼び出して自然な形で結果を得ることができます。サンプルをチェック!

編集:私は言及して忘れて、dnodeはsocket.ioを下に使用します。

+0

これは偉大に見えるが、クライアント側で関数を定義し、サーバはそれを実行持つ方法はありますか?私が見るすべての例は、サーバー側の機能です。 –

+0

はい、可能です、Now.JSはそれを行います。また、フードの下でもsocket.ioを使います。 – BRampersad

+0

dnodeはsocket.ioではなくSockJSを使用します。 – Mitar

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); 

クライアント

ここ

チェックアウトより多くの例:ここDNodeについてhttps://github.com/substack/dnode/tree/master/examples

ニースチュートリアル:http://substack.net/posts/85e1bd/DNode-Asynchronous-Remote-Method-Invocation-for-Node-js-and-the-Browser

関連する問題