Express.js 中的路由是如何工作的

在使用 Express.js 搭建 Web 应用的过程中,路由是非常重要的组成部分。它指定了 Web 应用中不同 URL 地址对应的代码逻辑,以便服务器能对不同的请求做出正确的响应。本文将详细介绍 Express.js 中的路由是如何工作的,并提供指导性的学习和示例代码。

基本概念

在 Express.js 中,一个路由是由一个 HTTP 方法和一个 URL 地址组成的。例如,以下是一个基本路由的声明:

------------ ------------- ---- -
  ---------------- ---------
---

在这个例子中,app.get 方法指定了一个 HTTP GET 请求和 URL 地址,这个 URL 地址是根路由 /。当一个 HTTP GET 请求匹配到这个路由时,一个回调函数将被执行。这个回调函数包含两个参数:请求对象 req 和响应对象 res。在这个例子中,回调函数通过 res.send 方法将 Hello, world! 这个字符串作为响应返回到客户端。

不仅如此,我们还可以使用 app.postapp.putapp.delete 等方法来创建其他类型的路由。例如,以下代码演示了如何创建一个处理 POST 请求的路由:

------------------ ------------- ---- -
  -------------- --- ---- -----------
---

在这个例子中,app.post 方法指定了一个 HTTP POST 请求和 URL 地址 /users。当一个 HTTP POST 请求匹配到这个路由时,回调函数将会被执行,并且通过 res.send 方法将一个字符串作为响应返回到客户端。

路由参数

除了基本的路由外,Express.js 还支持路由参数,它可以用来捕捉 URL 中的特定部分。例如,以下是一个带有路由参数的路由声明:

------------------------- ------------- ---- -
  ------------- ---- -- --- - - -------------------
---

在这个例子中,我们使用 :userId 来声明一个路由参数,表示任何以 /users/ 开头并且后面紧跟着一个字符串的 URL 地址都能匹配到这个路由。例如,/users/123/users/hello 都是有效的匹配。

当一个请求匹配到这个路由时,路由参数的值将会被解析到请求对象的 params 属性中。在这个例子中,我们使用 req.params.userId 来获取路由参数的值,并使用它来产生响应。

路由中间件

除了可以在路由中定义回调函数外,还可以把一系列中间件函数串联到一起来处理 HTTP 请求。这样做的好处在于让代码更加模块化,易于维护。例如,以下是一个使用路由中间件的例子:

-------- --------------- ---- ----- -
  ----------------- ------- --------------
  -------
-

------------------------- ----------- ------------- ---- -
  ------------- ---- -- --- - - -------------------
---

在这个例子中,我们使用一个名为 logRequest 的中间件函数来打印出每一个 HTTP 请求的日志。中间件函数接收三个参数:请求对象 req、响应对象 res、以及一个表示下一个中间件函数的参数 next。每当一个请求到达这个路由时,会按照 logRequest、路由回调函数的顺序调用中间件函数。在中间件函数的最后,使用 next() 方法来调用下一个中间件函数。

总结

本文介绍了 Express.js 中的路由是如何工作的,包括了路由基本概念、路由参数和路由中间件。路由是架构 Web 应用的重要组成部分,了解它的工作原理和使用方法对提高应用的性能、可维护性和可扩展性都非常重要。

示例代码:

----- ------- - -------------------
----- --- - ----------

-------- --------------- ---- ----- -
  ----------------- ------- --------------
  -------
-

------------ ------------- ---- -
  ---------------- ---------
---

------------------ ------------- ---- -
  -------------- --- ---- -----------
---

------------------------- ----------- ------------- ---- -
  ------------- ---- -- --- - - -------------------
---

---------------- ---------- -
  ------------------- ------- -- ---- ----------
---

来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/6647f4c4d3423812e467ddfc