【问题标题】:Express JS Basic Routing TemplateExpress JS 基本路由模板
【发布时间】:2019-12-30 01:32:49
【问题描述】:

谁能给我解释清楚?

const express = require("express");
const app = express();

我得到了第一行代码,但没有得到将变量“app”初始化为 express() 的概念?当我们导入express时,我们也可以访问express()?

理论上它的作用是什么? express() 的那个 () 是做什么的? 我们总是必须这样做吗?

谢谢。

【问题讨论】:

  • 我不太明白,你能解释一下吗?
  • @KeKe - 在这个声明中const express = require("express");express 是一个“工厂函数”。如果您不知道,请查看该术语。当您调用它时,它会创建并返回一个 express app 对象的实例。在您调用它之前,它只是一个等待调用的函数,并且没有快速应用程序的工作实例。它不为您创建实例的原因是在某些情况下您想要创建多个应用程序(例如 httphttps 服务器都在监听不同的端口,因此您需要能够创建自己的实例.

标签: express routing


【解决方案1】:

如果您熟悉面向对象的编程,那么想到这一点的方法就是创建一个实例。

当您导入 express 时,您正在导入类。但是,您的服务器是该类的一个实例。所以,当你打电话时

const app = express();

您正在启动您的服务器。您现在拥有可以从 app 与之交互的服务器的编码,而原始导入仅引用该服务器的同一类(即像模板)。 express() 函数只是为您初始化一个新的服务器对象。

从技术上讲,您可以运行多个“服务器”:

const app1 = express();
const app2 = express();

您希望它们彼此独立,这就是您不只使用顶级导入的原因。

【讨论】:

  • 所以 app = express () 本质上创建了 Express 的一个对象——一个“服务器”——一旦它们被制作出来,它将独立于其他对象。我明白了吗?
  • @KeKe 是的,您在这方面的理解是正确的。 express() 返回的每个实例都将相互独立。
【解决方案2】:

根据documentation

express() 函数是 express 模块导出的顶级函数

该函数返回一个本质上是 Express 应用程序的应用程序对象。

app 对象有方法

  • 路由 HTTP 请求;例如,请参阅 app.METHOD 和 app.param。
  • 配置中间件
  • 呈现 HTML 视图;见
  • 注册模板引擎;请参阅 app.engine。

【讨论】:

  • 但是其他人所说的“多个 express 实例”是什么意思?
  • 好像我们不能做 express.get / express.set / express.listen 等?
  • 多个实例是在同一个Node进程上运行的多个应用程序。就像@BT99 在他的回答中指出的那样,这些应用程序可以在具有自己或共享路由、中间件、视图的不同端口上运行
猜你喜欢
  • 1970-01-01
  • 2016-11-23
  • 2016-10-31
  • 1970-01-01
  • 1970-01-01
  • 2016-04-15
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多