我使用的是基本的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);
所以我的问题是,我如何传回对象/变量/数组而不是静态文本?
答案 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