我有一个非常简单的服务器:
var http = require('http');
var fs = require('fs');
http.createServer(function (req, res) {
res.writeHead(200, { 'Content-Type': 'text/html' });
fs.readFile('index.html', 'utf-8', function (err, content) {
if (err) {
res.end('something went wrong.');
return;
}
res.end(content);
});
}).listen(8080);
console.log("Server running on port 8080.")
这需要渲染我的html,但现在我想发送一个对象。像这样:
var arr = [1,2,3];
我希望能够使用js在客户端操作此对象。所以除了知道如何从服务器发送到客户端之外,我想知道如何在客户端接收它,如果这是有道理的。
我正在努力了解幕后发生的事情,所以我不想使用快递。
答案 0 :(得分:0)
一般来说,通过HTTP协议可以交换的唯一内容是数据。不是对象,不是html文件,只是数据。 将对象转换为数据并返回的过程称为序列化。 对于简单对象的特定情况,您可以使用JSON内置对象来序列化对象。
在服务器:
var data = JSON.stringify(arr);
res.end(data);
在客户:
var arr = JSON.parse(data);
关于如何在客户端上询问和接收数据,请尝试使用Google搜索XmlHTTPRequest。
根据要求,添加功能齐全的服务器端代码:
var http = require('http');
var fs = require('fs');
http.createServer(function (req, res) {
res.writeHead(200, { 'Content-Type': 'text/plain', 'Access-Control-Allow-Origin': '*' });
var data = JSON.stringify([1, 2, 3]);
res.end(data);
}).listen(8080);
console.log("Server running on port 8080.")
仅Access-Control-Allow-Origin
标头才能在控制台中运行您的代码(它被称为' CORS'并且意味着可以从其他域上托管的页面请求此端点)
答案 1 :(得分:0)
只需更改响应类型并将JSON字符串化:
http.createServer(function (req, res) {
var arr = [1,2,3];
res.writeHead(200, { 'Content-Type': 'application/json'});
res.end(JSON.stringify(content), 'utf-8');
}).listen(8080);
答案 2 :(得分:0)
好吧好像我做错了几件事。它主要与服务器上的路由有关。这就是我试过的事情:
var http = require('http');
var fs = require('fs');
http.createServer(function (req, res) {
var arr = [1, 2, 3];
res.writeHead(200, { 'Content-Type': 'application/json' });
res.end(JSON.stringify(arr), 'utf-8');
}).listen(8080);
console.log("Server running on port 8080.")
在客户端我有这样的事情:
xmlhttp = new XMLHttpRequest();
xmlhttp.open("GET","http://localhost:8080/", true);
xmlhttp.onreadystatechange=function(){
if (xmlhttp.readyState==4 && xmlhttp.status==200){
console.log(JSON.parse(xmlhttp.responseText));
}
}
xmlhttp.send();
由于某种原因,console.log永远不会发生,我只会在页面上打印数组。但是通过像这样添加一些路由到我的服务器,它起作用了:
var http = require('http');
var fs = require('fs');
http.createServer(function (req, res) {
if (req.method === 'GET' && req.url === '/') {
res.writeHead(200, { 'Content-Type': 'text/html' });
fs.readFile('index.html', 'utf-8', function (err, content) {
if (err) {
res.end('something went wrong.');
return;
}
res.end(content);
});
}
if (req.method === 'GET' && req.url === '/data') {
var arr = [1, 2, 3];
res.writeHead(200, { 'Content-Type': 'application/json' });
res.end(JSON.stringify(arr), 'utf-8');
}
}).listen(8080);
console.log("Server running on port 8080.")