Node.js示例代码不起作用

时间:2013-11-07 00:26:50

标签: javascript node.js

我正在尝试运行一些简单的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。

3 个答案:

答案 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