Node.js示例不起作用

时间:2014-03-13 20:36:01

标签: node.js

我按照以下两个例子:http://nodejs.org/

第一个有效。然后我尝试了第二个,它在终端中显示以下错误,并在我输入url(localhost:8000)时结束了该过程。它汇编得很好。

$ node node.js

events.js:72
        throw er; // Unhandled 'error' event
              ^
Error: read ECONNRESET
    at errnoException (net.js:901:11)
    at TCP.onread (net.js:556:19)

有些搜索结果说可能是端口已经在使用,但我在第二个例子中更改了端口,但仍然没有用。

当我访问localhost:8000(代码中的相同端口)时,网页显示:

Echo server
GET / HTTP/1.1
Host: localhost:8000
Connection: keep-alive
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.149 Safari/537.36
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8

我完全复制了node.js网站上的代码,并尝试更改端口号。不确定是什么问题。

Edit:回复评论

  • 没有防火墙。

  • 操作系统:Linux Mint 15

  • 节点v0.10.25

过程:

$ ps
  PID TTY          TIME CMD
29150 pts/1    00:00:00 bash
29226 pts/1    00:00:00 ps

1 个答案:

答案 0 :(得分:3)

正如Hector的评论所指出的那样:第二个例子是TCP服务器。它正常启动(没有端口已经使用过的问题)。当您针对此发出HTTP请求时,将发生以下情况

  • 您的浏览器将HTTP协议数据发送到TCP套接字
  • node.js写回“Echo Server”
  • node.js写回了从浏览器收到的HTTP协议聊天(这就是为什么你在“网页”上看到“有趣”的东西)
  • 您的浏览器关闭套接字(可能正在等待超时,因此可能需要一段时间)
  • 此时node.js有一个打开到可写套接字流的管道,因此会向可读的套接字流发送一个错误事件(这两个都是var socket
  • 未处理此错误,因此您会看到异常

要“修复”此问题,要么不使用浏览器,即不要从客户端关闭套接字(例如,您可以通过telnet与脚本通信),或者在程序中添加处理像这样的错误事件

socket.on('error', function() {
    console.log("Error is properly handled");
});

(最好在致电socket.write之前)。