Node.js 为什么在所有请求之后app.listen应该在末尾?为什么有必要呢?
为什么app.listen在末尾?它不应该放在app.get之前,以便在端口5000侦听请求吗 为什么app.listen在末尾 请参见下文,但主要是作为一种约定,使用逻辑和安全的初始化顺序,在启动服务器并将其暴露给传入连接之前,首先配置服务器 它不应该放在app.get之前,以便在端口5000侦听请求吗 否,app.get注册路由处理程序。在这种情况下,寄存器意味着它将路由添加到一个内部列表中,这样,当将来的某个传入请求到达时,Express可以查看该列表,以查看哪些路由处理程序与请求的路径匹配。在应用程序对象上注册路由处理程序之前,需要先创建该应用程序对象,但服务器是否已启动并不重要 请记住,app.get所发生的一切就是将路由定义添加到内部列表中,以便在将来某个时间将其与传入路径进行比较,以查看其是否匹配。它实际上没有运行任何路由处理程序。您可以逻辑地将其视为注册事件侦听器。类似地,所做的只是向列表中添加一些数据,以便将来可以调用某些内容 所以,我们已经证明,在注册路线之前或之后是否调用app.listen其实并不重要。路线将被登记,以备将来使用 配置服务器然后启动服务器似乎是一种常见的约定,但没有理由这样做 如果启动服务器,然后配置路由,从逻辑上看,服务器运行的时间窗口可能存在,但所有路由尚未定义,这可能会创建一个奇怪的时间窗口,在该时间窗口中,人们可能连接到服务器,期望它正常运行,但尚未完全配置。但是,由于Javascript的单线程特性,这可能不会引起问题。如果传入请求在您启动服务器之后到达,但在您配置所有路由之前到达,仍然不会导致问题。这是因为,当同步服务器初始化代码运行时,传入的请求将插入到Javascript事件队列中,并且在当前运行的Javascript完成之前,不会将其从队列中拉出。因此,只要您在这个Javascript中定义了所有路由,它们就会在实际处理第一个请求之前被完全配置。这意味着在处理传入请求之前,仍将定义所有路由。因此,它们将及时到位 所以。。。对于大多数普通的同步服务器初始化代码来说,在配置路由之前还是之后执行app.listen实际上并不重要。它很可能是最后一个完成的,就像一个逻辑约定,似乎是完成配置服务器然后启动服务器的适当顺序 我应该提到一个边缘案例。如果出于某种原因,服务器初始化的一部分涉及进行异步调用,例如,某个app.get在某个异步回调中,而您在启动该回调之前正在执行app.listen,则服务器运行的时间窗口将打开,但尚未正确配置。这不是通常的服务器配置方式,但仍然可以这样做。因此,在这种情况下,为了避免在部分配置的服务器上处理请求,您需要等待调用app.listen,直到完成所有异步操作Node.js 为什么在所有请求之后app.listen应该在末尾?为什么有必要呢?,node.js,express,Node.js,Express,为什么app.listen在末尾?它不应该放在app.get之前,以便在端口5000侦听请求吗 为什么app.listen在末尾 请参见下文,但主要是作为一种约定,使用逻辑和安全的初始化顺序,在启动服务器并将其暴露给传入连接之前,首先配置服务器 它不应该放在app.get之前,以便在端口5000侦听请求吗 否,app.get注册路由处理程序。在这种情况下,寄存器意味着它将路由添加到一个内部列表中,这样,当将来的某个传入请求到达时,Express可以查看该列表,以查看哪些路由处理程序与请求的路径匹
const app = express();
app.get("/", (req, res) => {
res.send("Hello there");
});
const PORT = process.env.PORT || 5000;
app.listen(PORT, () => console.log(`server started on ${PORT}`));