Module 03 · Express Web Application FrameworkExpress Web 应用框架
Routing, Middleware, and Templating路由、中间件和模板渲染
🎥 视频目标:
在本视频中,您将能够:
- 解释 Express 中的路由(Routing)。
- 描述 Middleware 及其使用方式。
- 解释 Express 中的模板渲染(Template Rendering)。
路由(Routing)
路由是服务器端脚本中的一个重要方面。不同的请求路径需要由服务器处理,常见的请求类型有 GET、POST、PUT 和 DELETE。服务器必须处理每个请求路径,或者返回相应的错误信息。路由可以在应用级别或路由级别进行处理。
1.应用级路由处理
在应用级别处理每个请求方法和路由,通常适用于较少的端点(routes)。
- GET 请求:
App.get用于处理访问/user/about/id端点的 GET 请求。 - POST 请求:
App.post用于处理访问/user/about/id端点的 POST 请求。 - 处理其他端点如
/item/about/id,App.get和App.post同样分别处理 GET 和 POST 请求。

2.路由器级路由处理
当路由数量增多时,代码维护会更加复杂,这时使用路由器(router)来处理不同的请求更为合适。
通过定义两个路由器,分别处理不同的请求:
itemRouter处理与/item相关的请求。userRouter处理与/user相关的请求。

根据 URL 路径,响应内容会有所不同。
中间件(Middleware)
中间件是一种函数,它能够访问请求(request)和响应(response)对象,并执行接下来的操作。中间件的关键特点是,它们能够按顺序链接,并在每个请求的处理过程中执行不同的任务。
1.中间件的分类
中间件根据其用途、作用域以及来源,可以分为五种类型:
- 应用级中间件(Application-level middleware)
- 路由器级中间件(Router-level middleware)
- 错误处理中间件(Error-handling middleware)
- 内置中间件(Built-in middleware)
- 第三方中间件(Third-party middleware)
中间件对于解析请求、添加身份验证和处理错误等活动非常有用。
应用级中间件
应用级中间件通过 app.use 绑定到应用上,所有来自客户端的请求都会经过这些中间件。常用于身份验证、检查会话信息等。
示例:
- 如果密码是
pwd123,则记录时间并继续处理请求;否则返回 402 错误提示用户无法登录。


路由器级中间件
路由器级中间件通过 express.Router() 绑定到特定的路由器实例,可以针对不同路由应用不同的中间件。
示例:
- 如果路由为
/user,则请求会经过userRouter;

- 如果路由为
/item,则请求会经过itemRouter。

错误处理中间件
错误处理中间件通常绑定到应用或特定的路由器上。它总是接受四个参数:error、request、response 和 next。即使不使用 next,也需要在方法签名中定义它。
示例:
- 如果访问
user id 1,会抛出错误,提示是管理员用户,返回 500 错误;

- 对于其他用户,正常处理请求并返回 “Hello User Id” 消息。
内置中间件与第三方中间件
内置中间件
Express 提供了一些内置中间件,常用于:
- 渲染静态 HTML 页面,
- 解析 JSON 输入,
- 解析 Cookies。
示例:
- 静态中间件:从服务器端渲染静态文件如 HTML 页面和图像,设置静态文件路径为
cad220_staticfiles。

第三方中间件
通过 npm install 安装第三方中间件,并将其作为功能模块添加到应用中。Node.js 是开源的,拥有大量可供安装和使用的中间件。
自定义中间件
自定义中间件非常简单,只需定义一个接受 request、response 和 next 三个参数的函数,并通过 app.use 或 router.use 绑定。
示例:
- 创建名为
myLogger的中间件,记录请求接收的时间。
模板渲染(Template Rendering)
模板渲染是服务器在 HTML 模板中填充动态内容的能力。示例中使用了 express-react-views,它能够从服务器渲染 React 组件。
模板渲染过程
- 设置 视图引擎(view engine)属性,负责从视图(JSX 代码)生成 HTML。
- 视图存放在
myviews文件夹中,视图引擎会查找myviews文件夹中的index.jsx文件,并传递属性name给它。 - 渲染结果会根据传递的用户数据,输出用户的姓名。

示例:
- 对于两个不同用户,渲染的结果分别显示不同的姓名。

总结
在本视频中,我们学习了:
- 路由:用于处理不同请求路径的查询,支持应用级和路由器级的路由处理。
- 中间件:包括应用级、路由器级、错误处理、内置中间件和第三方中间件。
- 模板渲染:服务器在 HTML 模板中动态填充内容,提升用户体验。
Express 提供了强大的路由、middleware 和模板渲染功能,可以帮助开发者高效构建现代化的 Web 应用。