工作stream程使用Node.JS HTTP服务器
现在学习Node.JS。
一切都很顺利,只是我对工作stream程有一点挑战。
所以我创build一个HTTP服务器,在一个特定的端口侦听。 例如
var http = require("http"); http.createServer(function(request, response) { response.writeHead(200, {"Content-Type": "text/plain"}); response.write("Hello World"); response.end(); }).listen(8888);
它工作正常。 唯一的问题是,当我编辑具有上述代码的文件,并尝试通过键入节点server.js再次启动节点进程我得到以下错误:
Error: EADDRINUSE, Address already in use.
所以我知道我需要杀死节点进程使用ps之前,可以体现更改,我可以重新启动之前。
但是,这看起来像一个痛苦。 我是否需要在任何时候修改我正在写的服务器来终止节点进程?
我相信有更好的办法。 任何帮助?
在开发过程中,我倾向于在terminal窗口中从命令行运行节点。 当我完成testing时,我只需按Ctrl-C来中断当前杀死节点的进程,然后按向上箭头键来重新启动进程。
我的解决scheme就像
npm install dev -g node-dev app.js
node-dev与'node'相同,但每当应用程序dir(或subdir)中的任何文件被更改时,都会自动重新运行app.js。 这意味着在静态文件更改时也要重新启动,但在开发模式下应该可以接受
没有任何简单的方法。 节点的作者不喜欢热再装的想法,所以这是它的工作方式。
如果你把你的服务器放在一个模块中, require
从主脚本中获取, fs.watchFile
用于修改.js,然后手动停止它作为文件更改的反应,从模块caching手动删除它( require.cache
如果我没有弄错的话),然后再次require
。
或者在subprocess中运行它,并在文件更改后杀死并重新生成它(也就是自动执行你现在要做的事情)。
你可以使用像nodemon ( 这里的video教程 )或node-supervisor,这样服务器在编辑文件时自动重启。
如果要手动执行此操作,则只需中断进程(CTRL + C)并重新运行上一个命令(节点server.js)。