【问题标题】:In Node.js how do I communicate with client side JavaScript?在 Node.js 中,我如何与客户端 JavaScript 进行通信?
【发布时间】:2012-06-20 08:22:51
【问题描述】:

例如假设客户端我有一个 JavaScript 函数

function getLocation() {
    var latitude = ...;
    var longitude = ...;
}

使用对 Google 或类似的函数调用来检索坐标。如何将此信息传输到我的 Node.js 服务器?

【问题讨论】:

  • 为什么不使用某种模板系统?它会让你的生活更轻松
  • @elclanrs 模板化有什么帮助?

标签: javascript node.js


【解决方案1】:

最简单的方法?设置 Express 并让您的客户端代码通过 Ajax 进行通信(例如,使用 jQuery)。

(function() {
  var app, express;

  express = require("express");

  app = express.createServer();

  app.configure(function() {
    app.use(express.bodyParser());
    return app.use(app.router);
  });

  app.configure("development", function() {
    return app.use(express.errorHandler({
      dumpExceptions: true,
      showStack: true
    }));
  });

  app.post("/locations", function(request, response) {
    var latitude, longitude;
    latitude = request.body.latitude;
    longitude = request.body.longitude;
    return response.json({}, 200);
  });

  app.listen(80);

}).call(this);

在客户端,你可以这样称呼它:

var latitude = 0
  , longitude = 0; // Set from form

$.post({
  url: "http://localhost/locations",
  data: {latitude: latitude, longitude: longitude},
  success: function (data) {
    console.log("Success");
  },
  dataType: "json"
});

请注意,此代码只是一个示例;您必须解决错误处理等问题。

希望对您有所帮助。

【讨论】:

    【解决方案2】:

    通过发出 HTTP 请求,就像在 Web 应用程序中使用任何其他服务器端程序一样。

    您可以使用XMLHttpRequest object 或通过生成<form> 然后提交它或其他各种方法来完成此操作。

    【讨论】:

      【解决方案3】:

      如果您需要(软)实时功能,我建议使用Socket.io library。使用套接字,节点还可以将数据推送到您的客户端脚本。

      【讨论】:

      • 他很可能不需要socket.io
      • 哈哈,那你为什么在 Quentin 的帖子中提到 WebSockets? :D。这正是 socket.io 提供的,但具有跨浏览器支持。
      【解决方案4】:

      我认为NowJS 非常适合您。示例:

      // On the Node.JS server
      
      var nowjs = require("now");
      var everyone = nowjs.initialize(httpServer);
      
      everyone.now.getServerInfo = function(callback){
        db.doQuery(callback);
      }
      
      // In the browser
      
      <script>
      
      now.getServerInfo(function(data){
        // data contains the query results
      });
      
      </script>
      

      您可以将变量和函数放在一个公共命名空间(即now 对象)中,从客户端到服务器,反之亦然。

      【讨论】:

      • nowjs如果只需要获取几条小数据,是一个复杂的解决方案
      • 同意。但他并没有说他只需要几条数据;他只是举了一个例子
      • 现在,Nowjs.com 服务器宕机了,github 代码已经超过 2 年了。另外,npm install now 编译失败,需要 python 编译。
      • 我注意到代码中的一个问题:JavaScript 是用来在.js 文件中使用的。将它作为 HTML 源代码的一部分是一个坏习惯,如果 XSS 攻击或类似攻击,它会变得非常脆弱。但是我知道这只是一个例子。
      【解决方案5】:

      我认为你需要RPCnode modules section also has a section covering RPC。我想你应该看看DNode。看看DNode on the browser section

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-03-21
        • 1970-01-01
        • 2015-02-16
        • 1970-01-01
        • 2019-03-05
        • 1970-01-01
        • 1970-01-01
        • 2018-01-18
        相关资源
        最近更新 更多