即使事件循环中没有要执行的回调,Node.js Web服务器如何保持运行?

时间:2019-06-02 16:05:52

标签: javascript node.js nodejs-server

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

在线搜索有关node.js的信息,据指出,一旦启动脚本(node index.js),回调将置于相应的阶段,然后在解析脚本之后,节点进程将进入事件循环并执行特定于某个阶段的适当回调。如果没有更多的回调要执行,节点将退出。

所以我的问题是,当我访问home page "/"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程序退出的原因是什么?

1 个答案:

答案 0 :(得分:6)

Node.js不会仅仅因为事件循环没有任何未完成的工作而退出。 (在这方面,This page令人误解,因为它是不完整的。)在以下情况下退出:

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

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

如果在事件循环没有任何未完成的工作时退出,它甚至都不会等待运行您的连接回调一次。它会在listen调用之后立即退出。