Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
来自node.js新手的一些问题_Node.js - Fatal编程技术网

来自node.js新手的一些问题

来自node.js新手的一些问题,node.js,Node.js,我刚刚开始学习node,正在Fedora 12上使用node-v0.4.11。它安装没有任何错误,我能够运行一些基本的程序,但有一些事情我不能弄清楚 如果我在一个端口上创建一个服务器,然后使用Ctrl+C停止节点 如果不重新启动服务器,我无法再次使用该端口启动服务器 系统 我的代码如下所示 var port=8080; var count=0; var http=require('http'); var server = http.createServer(function(req, res)

我刚刚开始学习node,正在Fedora 12上使用node-v0.4.11。它安装没有任何错误,我能够运行一些基本的程序,但有一些事情我不能弄清楚

如果我在一个端口上创建一个服务器,然后使用Ctrl+C停止节点 如果不重新启动服务器,我无法再次使用该端口启动服务器 系统

我的代码如下所示

var port=8080;
var count=0;
var http=require('http');
var server = http.createServer(function(req, res) {
  count++;
  console.log('request no '+count+' received');
  res.writeHead(200);
  res.end('you are at port '+port);
  });
server.listen(port);
console.log('server started at port '+port);
现在,当我保存文件并执行它时,服务器启动。但是,当我从shell停止服务器时,我无法在我之前启动的端口(在本例中为8080端口)再次启动服务器。这很糟糕,因为每次我必须更改该文件时,我也必须更改端口号。我可以停止此行为吗

编辑:

这是我在尝试再次在同一端口启动服务器时遇到的错误

Server started at 8080

node.js:203
        throw e; // process.nextTick error, or 'error' event on first tick
              ^
Error: listen EADDRINUSE
    at errnoException (net_uv.js:557:11)
    at Array.<anonymous> (net_uv.js:632:28)
    at EventEmitter._tickCallback (node.js:195:26)
服务器在8080启动
node.js:203
抛出e;//process.nextTick错误,或第一次勾选时的“error”事件
^
错误:请使用侦听器
在errnoException(net_uv.js:557:11)
在阵列上。(net_uv.js:632:28)
在EventEmitter上调用(node.js:195:26)
在使用
Ctrl+C
终止
node
后,我看到了进程列表,发现node仍在运行。所以我杀死了它,并再次检查了进程列表,以确保它是死的,并且它是死的(我在进程列表中看不到它)。现在我再次尝试在同一端口启动服务器,但我得到了与上面相同的错误。一旦我停止服务器并从浏览器发出请求,请求将永远挂起(它将继续等待)


我的下一个问题是,在上面的示例中,当服务器启动时 第一个请求
count
增加了3次,我可以看到3次 控制台上的消息。这只是第一个请求,如果我提出的话 更多请求的计数只增加一次。怎么了

这个问题解决了


我的下一个问题是,如果我更改
res.writeHead(200)
res.writeHead(404)或任何其他有效的状态代码,如
300
节点 在命令行中给出错误,但这些是有效的状态代码和 服务器应该启动并根据 对于
404
,找不到类似
的状态代码。我做错了什么

这个问题解决了


我无法使用
Firebug
的“Net”选项卡来监视请求 向节点创建的服务器发送请求。有没有办法做到这一点

谢谢你的支持

我无法在以前启动的端口再次启动服务器

你不应该看到这种行为,我无法复制它。当您再次尝试启动服务器时,是否收到错误消息?这是怎么一回事?停止服务器后,是否在进程列表中看到任何
节点
进程?如果是这样,你能在杀死他们后启动你的服务器吗


count
增加3倍,我可以在控制台上看到3条消息

您的浏览器正在发送多个请求。例如,在Chrome中,您可能会收到(1)预取请求(Chrome在其中下载它认为需要的页面),(2)实际的页面请求,以及(3)对favicon.ico的请求;您的节点应用程序正在侦听所有请求,而不仅仅是对
/
URL的请求。在初始请求之后,浏览器缓存favicon等,不需要再次请求它们

尝试添加
console.log(请求url)
到您的回调并查看浏览器要求的URL


任何其他有效的状态代码,如
300
节点,都会在命令行中显示错误

我无法重现这个问题。你收到了什么错误


当我向节点创建的服务器发送请求时,我无法使用Firebug的“Net”选项卡监视请求


我也不能复制这个。Firebug和其他客户端调试工具不知道或不关心服务器上运行的是什么技术;它只会说HTTP。

奇怪。。。我输入了完全相同的代码,没有任何问题。。。这就是正在运行的一切吗?
但是当我从shell终止节点时,我无法在我之前启动的端口再次启动服务器
您是如何做到的?您应该尝试重新启动并在8080上重试;)@这就是我必须要做的,我不明白为什么。我正在从shell终止节点进程,这应该会释放端口。如果不行,我可以在不重新启动的情况下释放该端口吗?你确定你使用的是ctrl-c而不是ctrl-z吗?@david我使用的是ctrl-z。我真蠢。使用
Ctrl-C
可以解决所有问题。向所有浪费时间的人道歉谢谢你的回答。我已经编辑了我的问题,以包含我第一个问题的错误。我检查了为什么计数增加了3倍,我发现
Firefox
favicon.icon
发送了2个请求,我认为这是因为当它第一次发出请求时,它没有得到图标,所以再次尝试。但是我没有得到你为chrome所说的
预取
的东西。为什么浏览器会猜测我想要什么?是的,甚至我都不明白为什么firebug不能捕获对节点的请求。毕竟它们都是http请求。顺便说一句,你可能指的是
favicon.ico
而不是
.icon
:)Chrome有一个新的ish功能,在你开始键入URL后,它会在你按下enter键之前下载页面。这只是又一次试图让事情“更快”的尝试。@Tom真的!手指比大脑快。:)谢谢