Express 是一个极其灵活的框架,所以在创建 Express 应用的方式上也存在多种可能。根据需求和项目的具体情况,可以有很多不同的写法。本节介绍两种常见的用于创建 Express 应用的最基本写法。

    下面这两种写法都可以创建一个 Express 应用,并在指定的端口上启动一个服务器。最终的效果是一样的,即都会创建一个可以接收并处理 HTTP 请求的 Web 服务器。

    1. const express = require("express");
    2. const http = require("http");
    3. const app = express(); // 创建一个 express 应用
    4. // app 实际上是一个函数,用于处理请求的函数
    5. const server = http.createServer(app);
    6. const port = 3000;
    7. server.listen(port, () => {
    8. console.log(`server listen on ${port}`);
    9. });

    这种写法显式地使用 Node.js 的 http 模块来创建服务器。这样做的好处是,我们可以 更灵活 地控制服务器的行为,例如添加一些自定义的处理逻辑,或者使用 http 模块提供的一些底层的 API。这种写法更适用于需要深度定制服务器行为的场景。

    1. const express = require("express");
    2. const app = express();
    3. const port = 3000;
    4. app.listen(port, () => {
    5. console.log(`server listen on ${port}`);
    6. });

    这种写法直接使用 Express 的 listen 方法来启动服务器。在底层,app.listen 会调用 Node.js 的 http.createServer 来创建服务器。这种写法 更简洁,更适用于不需要深度定制服务器行为的常见场景。

    其实,写法 2 实现的效果,无非就是在内部将写法 1 给做了一层封装:

    1. function listen(port, cb) {
    2. const http = require('http')
    3. const server = http.createServer(this)
    4. server.listen(port, cb);
    5. // ...
    6. }