基础概念
在 Express.js 中,路由指的是确定如何响应客户端对特定 URI(或路径)的请求。每个路由可以具有一个或多个处理器函数,当路由匹配时这些函数将按特定顺序被调用。
路由有两个主要方面:HTTP 方法和路由路径。HTTP 方法通常是用于定义客户端操作的标准方法,如 GET、POST、PUT 和 DELETE。路由路径是指匹配请求路径的 URL。
基本用法
可以使用 Express 的路由方法来创建路由。下面是一个简单示例,说明了如何使用 GET 方法创建一个路由:
----- ------- - ------------------- ----- --- - ---------- ------------ ------------- ---- - --------------- --------- --- -----------------
上述代码监听客户端的 GET 请求,并返回 "Hello World!"。在这个例子中,路由方法是 app.get()
,其中第一个参数是匹配路径的字符串,第二个参数是回调函数,用于处理响应。
参数传递
JavaScript 允许使用函数参数进行参数传递,而 Express.js 将此特性转换为可用于路由处理中的参数。基本的语法如下:
--------------------------- ------------- ---- - ------------------------------- ---
在这个例子中,:parameter
表示一个动态路由参数变量,可以将其作为路由参数。例如,如果用户请求 /path/foo
,那么 req.params.parameter
的值就是 "foo"
。
中间件
在 Express.js 中,中间件是指在路由处理前执行的函数,类似于 AngularJS 中的拦截器。它们使用的方法有以下几种:
use()
:用于使用中间件函数get()
、post()
、put()
等:用于复杂的 URL 处理,可以带有参数、路由参数等
以下是一个使用其它第三方中间件和自定义中间件的示例:
----- ------- - ------------------- ----- --- - ---------- ----- ------ - ------------------ ----------------------- ----- ---------- - ----------------------- --------------------------- ------------ -------- ----- ---- - --------------- --------- --- -----------------
morgan
是一个用于展示请求数据的中间件;body-parser
是一个用于解析页面请求数据的中间件;
静态文件
在 Express.js 中,可以使用 express.static()
函数提供静态文件服务。
----------------------------------
在这个例子中,public
目录下的所有文件都可以通过访问请求方式进行访问。例如,如果有一个名为 image.jpg
的文件位于 public
目录下,可以通过请求 /image.jpg
来获取它。
错误处理
在 Express.js 中,需要编写特殊的代码来处理错误。以下是几个常用的示例:
-- --- --- -- --------------------- ---- ----- - --------------------------- ------ ---- ------- --- -- ----------- ------------ -------- ----- ---- - ----- --- ----------- ----- ---- -- ---------- --- ---------------- ----- ---- ---- ----- - ------------------------- ------------------------------- --------- ---
可以通过 .status()
来设置状态码,通过 .send()
来发送响应。此外,通过 next()
函数来将控制转移回 Express.js 核心。
结论
Express.js 是一个功能强大且灵活的后端框架,其路由处理机制使其成为创建功能丰富、响应迅速且易于扩展的应用程序的理想选择。深入了解和熟练掌握 Express.js 中的路由处理是建立高性能、健壮和可维护应用程序的重要一步。
参考文献
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/670dcc2b5f551281025e6de8