0

我正在使用基本的 node.js 介绍脚本,并且我在命令行中传递了一个参数。我希望这个参数在它运行后被传回给客户端。我可以传回纯文本或值的任何内容,但我不能传回包含相同信息的变量。

<!DOCTYPE html>
<html lang="en">
  <head>
  <meta charset="utf-8"/>
  <title>get test</title>
  <script src="http://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js">
  </script>
</head>
<body>
  <h1>Get Test</h1>
  <div id="test"></div>
  <script>
    $(document).ready(function() {
      $.ajax({url: 'http://localhost',dataType: "jsonp",jsonpCallback: "_testcb",cache: false,timeout: 5000,success: function(data) {
          $("#test").append(data);
        },
        error: function(jqXHR, textStatus, errorThrown) {
          alert('error ' + textStatus + " " + errorThrown);
        }
      });
    });
</script>
</body>
</html>

这是我的服务器代码:

var http = require('http');
var arr = new Array();
http.createServer(function (req, res) {
  res.writeHead(200);

  // print process.argv
  process.argv.forEach(function(val, index, array) {
    console.log(index + ': ' + val);
    arr[index] = val;
    res.write("Size" + val);
    res.end('_testcb(\'{"Size: \' + val + \'"}\')');
  });


  console.log(arr[2]);
}).listen(80);

所以我的问题是,我如何传回对象/变量/数组而不是静态文本?

4

2 回答 2

2

如果您尝试将数据发送到客户端,则需要将数据序列化为 JSON 以便将值发送到客户端。

例如,要将所有参数发送给客户端,您只需将方法更改为:

http.createServer(function (req, res) {
  res.writeHead(200);

  res.write("_testcb(" + JSON.stringify(process.argv) + ")");
}).listen(80);

这将使data(在客户端)进程的所有参数组成一个数组。

如果您想传递不同类型的对象,请按照您想要的方式创建变量,然后再次使用JSON.stringify将数据转换为可以发送的文本。例如:

http.createServer(function (req, res) {
  res.writeHead(200);

  // create an empty object
  var data = {};

  // add a size attribute
  data["Size"] = process.argv[1];

  res.write("_testcb(" + JSON.stringify(data) + ")");
}).listen(80);

所有这一切的关键是JSON.stringify方法——它允许您将变量转换为 JSON,然后客户端将其解析为数据。

于 2013-10-27T22:24:24.460 回答
1

您只能来回传递文本,但您可以传递 JSON 格式的文本并在客户端/服务器上对其进行解析。

编辑

以防我误解了这个问题,并且您正在寻找启动 nodejs 进程的命令行参数,请查看此线程:

如何传递命令行参数?

参数存储在process.argv

于 2013-10-27T22:15:34.840 回答