为了向学生展示他们可以使用Wireshark捕获的简单HTTP请求和响应,我启动了一个简单的Node.js HTTP服务器:
var fs = require('fs');
var http = require('http');
var port = 80;
var file = process.argv[2]; //This file contains a 42 byte HTML page
http.createServer(function (req, res) {
res.writeHead(200, { 'content-type' : 'text/html' }); // Sends first packet
fs.createReadStream(file).pipe(res); // Sends second packet
}).listen(port);
不幸的是,传输HTTP头和HTML的两行作为两个单独的TCP数据包发送(即使它们都非常小)。如果HTTP标头和HTML只是一个数据包,对我的学生来说会更简单。我怎么能改变我的代码才能做到这一点?
答案 0 :(得分:1)
var http = require('http');
var fs = require('fs');
var file = process.argv[2];
http.createServer(function(request, response) {
response.writeHeader(200, {"Content-Type": "text/html;"});
fs.readFile(file, function (err, html) {
if (err) {
throw err;
}
response.write(html);
response.end();
});
}).listen(8000);
它不起作用的原因是Node.js以异步方式运行所有内容。当您加载html文件时,服务器创建将同时启动。当您将html写入tcp套接字时,该文件很可能无法准备好。
我看到你之前想要做的事情......因为缩进,我误读了你的代码。如果此代码段有效,请告诉我。
答案 1 :(得分:0)
尝试使用像
这样的东西var file = process.argv[2];
fs.readFile(file, function (err, html) {
if (err) {
throw err;
}
http.createServer(function(request, response) {
response.writeHeader(200, {"Content-Type": "text/html"});
response.write(html);
response.end();
}).listen(8000);
});