2

下面的代码是一个简单的 Node.js Web 服务器,它在 URL 匹配时响应请求。

关于node.js的在线研究表明,一旦你开始你的脚本(node index.js)回调将被放置在它们的适当阶段,然后在你的脚本被解析后,节点进程将进入事件循环并执行特定于一个阶段的适当回调。如果没有更多要执行的回调,节点将退出。

所以我的问题是,如果请求处理程序在我第一次访问home page "/"OR时Hello Page "/hello运行,那么即使在后续请求之后节点仍然在运行。

const http = require('http');

const server = http.createServer((req,res) => {
  if(req.url === "/") {
    res.end("Home Page")
  }
  else if(req.url === "/hello") {
    res.end("Hello Page")
  }
  else {
    res.end("Page Not Found")
  }
})


server.listen(5000)

我希望一旦请求处理程序被执行,它应该从它被放入的任何阶段中删除,因此节点应该退出。那么是什么阻止了 Node 程序退出呢?

4

1 回答 1

5

Node.js 不会仅仅因为事件循环没有待处理的工作而退出。(此页面在这方面令人遗憾地由于存在不完整而具有误导性。)如果出现以下情况,它将退出:

  1. 事件循环没有待处理的工作,并且
  2. 没有未完成的 I/O 请求,并且
  3. 没有监听 I/O 服务器套接字

(我认为这是一个完整的列表。我找不到相关的文档,虽然我记得几年前在他们的网站上读过一些东西。)

如果它在事件循环没有待处理的工作时退出,它甚至不会等待运行一次连接回调。listen它会在调用后立即退出。

于 2019-06-02T16:16:17.627 回答