2011-12-20 75 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

這看起來不錯,但有沒有辦法定義在客戶端的功能,並讓服務器運行呢?我看到的所有示例都是服務器端函數。 – 2011-12-20 09:14:28

+0

是的,這是可能的,Now.JS做到了。它也使用引擎蓋下的socket.io。 – BRampersad 2011-12-20 13:13:44

+0

dnode使用SockJS而不是socket.io。 – Mitar 2012-12-09 04:28:27

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

    }; 

結帳更多的例子在這裏:約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

相關問題