【问题标题】:What is the order of execution of instruction in creating server in node.js?在 node.js 中创建服务器的指令执行顺序是什么?
【发布时间】:2021-12-11 00:25:53
【问题描述】:

谁能解释先执行哪条指令。 http.createServer()server.listen 以及 createserver 内部的回调函数何时执行?

const http = require('http');

const hostname = '127.0.0.1';
const port = 3000;

const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  res.end('Hello World');
});

server.listen(port, hostname, () => {
  console.log(`Server running at http://${hostname}:${port}/`);
});

【问题讨论】:

  • 给定.listen()createServer() 的返回值上被调用,只有一种可能的顺序。关于回调何时被调用,请查看documentation of the method
  • 当然,您要询问的是提供给createServerlisten回调 的顺序,而不是函数本身,对吧?我认为您需要改写您的问题以澄清这一点。你在哪里说instruction 我想你的意思是说callback。你说的是 http.createServer 的回调或 server.listen 的回调。你的措辞听起来像是在询问函数本身将被调用的顺序。当然,这毫无疑问。

标签: javascript node.js web-development-server


【解决方案1】:

如果您在此处查看 HTTP 模块的 NodeJS 文档: https://nodejs.org/api/http.html#httpcreateserveroptions-requestlistener

您将从文档中看到 http.createServer 调用返回的内容:

Returns a new instance of http.Server.

因此 createServer 调用必须完成才能返回服务器对象。在您的 server.listen 调用中使用的是下面几行。 NodeJS 中的异步并不意味着随机。

【讨论】:

    【解决方案2】:

    http.createServer() 是第一个执行的,因为在使用之前必须设置变量 server 以避免未定义的错误。而 http.createServer 是一个同步函数asynchronous-vs-synchronous

    【讨论】:

    • createServer里面的回调函数什么时候执行?
    • 回调在调用前等待请求。请求可以来自浏览器、邮递员、curl 或类似的东西
    • createServer 的回调是请求的处理程序。只要服务器处于侦听状态,您就会看到“服务器正在运行...”日志消息,这将在任何请求进入以由 (req, res) 处理程序处理之前发生。
    猜你喜欢
    • 2016-03-09
    • 2020-07-01
    • 1970-01-01
    • 2021-11-03
    • 1970-01-01
    • 2012-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多