Node JS返回undefined?

时间:2013-10-27 21:56:14

标签: javascript html node.js

我使用的是基本的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);

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

2 个答案:

答案 0 :(得分: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,然后客户端将其解析为数据。

答案 1 :(得分:1)

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

修改

如果我误解了这个问题,并且您希望获得nodejs进程启动的命令行参数,请查看此主题:

How do I pass command line arguments?

参数存储在process.argv