Javascript 不停地点头

Javascript 不停地点头,javascript,node.js,Javascript,Node.js,有没有办法让nodejs在每次服务页面时都重新加载 我想在开发周期中这样做,这样就可以避免每次代码更改时都必须关闭和启动?否。Node.js应该始终运行。我想你可能误解了nodejs的概念。为了让NodeJ服务于页面,它必须是自己的服务器。一旦启动服务器实例并开始侦听端口,它将一直运行,直到您关闭它 您是否调用了一个函数来关闭服务器,而不仅仅是关闭给定的流?编辑:尝试使用它们的require.reloadable()函数 我以前的回答是关于为什么不重新加载Node.js的进程,但在这里并不适用。

有没有办法让nodejs在每次服务页面时都重新加载


我想在开发周期中这样做,这样就可以避免每次代码更改时都必须关闭和启动?

否。Node.js应该始终运行。我想你可能误解了nodejs的概念。为了让NodeJ服务于页面,它必须是自己的服务器。一旦启动服务器实例并开始侦听端口,它将一直运行,直到您关闭它

您是否调用了一个函数来关闭服务器,而不仅仅是关闭给定的流?

编辑:尝试使用它们的
require.reloadable()函数

我以前的回答是关于为什么不重新加载Node.js的进程,但在这里并不适用。但我认为它仍然很重要,所以我把它留在这里

Node.js是事件IO,专门设计用于避免多线程或进程。这位名人问如何同时为一万名客户提供服务。这就是线程不能很好地工作的地方。Node.js只需一个线程就可以为10000个客户端提供服务。如果每次重新启动Node.js,将严重破坏Node.js

事件IO是什么意思? 举个例子:为页面提供服务。每当Node.js准备为页面提供服务时,事件循环会调用一个回调。事件循环是每个Node.js应用程序固有的,并在初始化完成后开始运行。服务器端的Node.js与浏览器中的客户端Javascript完全相同。每当发生事件(鼠标单击、超时等)时,都会调用回调(一个事件处理程序)

在服务器端呢?让我们来看一个简单的HTTP服务器(源代码示例取自)

这首先加载http模块,然后创建一个http服务器,并告诉它在每次http请求传入时从
函数(请求,响应)
开始调用内部函数,然后使服务器侦听端口8124。这几乎立即完成,因此此后将执行
console.log

现在Node.js事件循环接管。应用程序不会结束,而是等待请求。瞧,每个请求都会得到
Hello World\n
的答复


总之,不要重新启动Node.js,而是让它的事件循环决定何时必须运行代码。我个人会使用spark2(fork)并在找到测试时间后立即切换到。除此之外,这两个应用程序将侦听文件更改并在适当的时候重新加载服务器,这似乎是您正在寻找的内容。

找到了Nodemon,这正是我想要的:

有很多应用程序可以这样做,但我认为最好的是,因为您的服务器没有停机时间。您还可以使用它设置多个工作进程,或者使用cli REPL功能手动启动/停止/重新启动/显示统计信息。

我希望整个过程在每次请求时都能自行重新启动。西纳特拉的猎枪能做到这一点,如果你能告诉我们你为什么想要这个,那会有帮助的。我看不出有什么实际用途,没办法。很高兴你没有使用像C这样的东西,每次你做修改时都要编译你的应用程序。@TorValamo在这些评论中并不是一个真正有用的态度。如果您阅读了有关猎枪的内容(第一条评论中提供了链接),那么它的实际用途是非常明显的。说“没有办法”也是完全错误的,因为这里的其他几个答案实际上提供了问题的解决方案。@Jakob-您可能还注意到,这篇文章是一年前的,当时node不是PHP。我已经好几个月没有编程了,所以我不知道Node现在在哪里。但你必须从发布时的角度来看它…它不是用于生产,而是用于开发,所以当我编辑代码时,我不必重新启动,但是:Node仍然是最前沿的,从那时起,很多东西都发生了变化。似乎你的意思是在开发周期中热重新加载已编辑的源代码,而不是重新加载整个过程。这是否符合你的要求?虽然这可能无法回答您的问题,但它确实解释了Node.js的核心概念,并提供了您需要的模块:
var http = require('http');

http.createServer(function (request, response) {
  response.writeHead(200, {'Content-Type': 'text/plain'});
  response.end('Hello World\n');
}).listen(8124);

console.log('Server running at http://127.0.0.1:8124/');