此刻学习Node.JS。
一切都很顺利,只是我对工作流程有一点挑战。
所以我创建一个侦听特定端口的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);
工作正常。唯一的问题是,当我编辑具有上述代码的文件,并尝试通过键入node server.js再次启动节点进程时,我收到以下错误:
Error: EADDRINUSE, Address already in use.
所以我了解到我需要先使用ps终止节点进程,然后才能反映出更改,然后才能重新启动。
但这看起来很痛苦。每当我对正在编写的服务器进行更改时,我是否需要终止节点进程?
我相信有更好的方法。有什么帮助吗?
答案 0 :(得分:1)
在开发过程中,我倾向于在终端窗口中从命令行运行节点。当我完成测试时,我只需按Ctrl-C来中断当前进程,该进程将杀死节点,然后按向上箭头键重新启动进程。
答案 1 :(得分:1)
我的解决方案就像
一样简单npm install dev -g
node-dev app.js
node-dev与' node'相同。但每次更改应用程序目录(或子目录)中的任何文件时,都会自动重新运行app.js.它意味着在更改静态文件时重新启动,但对于开发模式应该是可接受的
答案 2 :(得分:0)
没有任何简单的方法。节点的作者不喜欢热重载的想法,所以这就是它的工作方式。
如果您将服务器放在模块中,require
来自主脚本,fs.watchFile
.js进行更改,然后手动将其作为对文件更改的反应停止,则可以破解它手动将其从模块缓存中删除(require.cache
,如果我没有记错的话),再次require
。
或者在子进程中运行它并在文件更改后杀死并重新生成它(也就是说,自动执行你现在手动执行的操作)。
答案 3 :(得分:0)
您可以使用nodemon(video tutorial about it here)或node-supervisor之类的内容,以便服务器在编辑文件时自动重启。
如果要手动执行此操作,则只需中断该过程(CTRL + C)并重新运行最后一个命令(node server.js)。