我正在尝试运行一些简单的node.js代码,这个hello world没有问题:
var http = require('http');
var server = http.createServer(function (request, response) {
response.writeHead(200, {"Content-Type": "text/plain"});
response.end("Este node.js criou um servidor\n");
});
server.listen(8000);
但是当我尝试运行这个应该足够简单的浏览器时(浏览器尝试IE和chrome)会长时间加载,然后暂停。可能是什么问题?
var http = require("http"),
fs = require("fs");
http.createServer(function (request, response) {
request.on('end', function () {
if (request.url == '/') {
fs.readFile('test.txt', 'utf-8', function (error, data) {
response.writeHead(200, {
'Content-Type': 'text/plain'
});
data = parseInt(data) + 1;
fs.writeFile('test.txt', data);
response.end('This page was refreshed ' + data + ' times!');
});
} else {
response.writeHead(404);
response.end();
}
});
}).listen(8000);
顺便说一句,我在与代码相同的文件夹中创建了test.txt文件,里面只有数字1。
答案 0 :(得分:3)
结束请求永远不会启动,因为在调用服务器时请求已完成。删除该行并准备如下:
var http = require("http"),
fs = require("fs");
http.createServer(function (request, response) {
// request.on('end', function () {
if (request.url == '/') {
fs.readFile('test.txt', 'utf-8', function (error, data) {
response.writeHead(200, {
'Content-Type': 'text/plain'
});
data = parseInt(data) + 1;
fs.writeFile('test.txt', data);
response.end('This page was refreshed ' + data + ' times!');
});
} else {
response.writeHead(404);
response.end();
}
// });
}).listen(8000);
答案 1 :(得分:2)
来自HTTP处理程序的请求对象是可读流的实例,在非流动模式下不会发出end
事件。如果需要end
事件,则必须恢复该流..
如果您不打算收集请求的正文,那么您根本不需要监听end
事件。你可以写下回复:
http.createServer(function(req, res) {
if (request.url == '/') {
fs.readFile('test.txt', 'utf-8', function (error, data) {
res.writeHead(200, {'Content-Type': 'text/plain'});
data = parseInt(data) + 1;
fs.writeFile('test.txt', data);
res.end('This page was refreshed ' + data + ' times!');
});
} else {
res.writeHead(404);
res.end();
}
}).listen();
否则,流可以通过以下任一方式转换为流动模式:
req.resume();
req.on('data', function(chunk) {});
答案 2 :(得分:0)
它的结构方式与我所看到的完全不同。您不应该需要request.on结构。通常,您可以使用以下内容:
var http = require("http");
var Start = function(){
var onRequest = function(request, response){
response.writeHead(200, {"Content-Type" : "text/plain" });
response.write("HEllo World");
response.end();
}
http.createServer(onRequest).listen(8888);
}
exports.Start = Start;
导出的原因是你可以从另一个文件启动它(如果你想要建议的模块化设计,这是好的。至于加载文件 - 你的加载方式可能有用,但问题是它只会服务器文本文件 - 尝试使用html文件将失败,你可能也想要提供html文件,以及.js和.css文件(以及其他任何东西,例如图片)。因此,请参考我的答案,这是一个代码很长的代码,在下面的链接中Click Here。