目录
Express介绍:
Express是一个基于Node.js平台的web应用开发框架,在Node.js基础之上扩展了web应用开发所需要的基础功能,从而使得我们开发Web应用更加方便、更加快捷。
中间件概念:
Express是一个自身功能极简,完全是路由和中间件构成一个web开发框架:从本质上来说,一个Express应用就是在调用各种中间件。
浏览器向服务器发送一个请求后,服务器直接通过 request 。定位属性的方式得到过 request 携带过去的数据(有用户输入的数据和浏览器本身的数据信息)。这中间就一定有一个函数将这些数据分类做了处理,已经处理好了,最后让 request 对象调用使用,这个处理数据处理函数就是 中间件 。
中间件的特点:
- 封装了一些处理一个完整事件的功能函数。
- 非内置的中间件需要通过安装后,require到文件就可以运行。
- 封装了一些或许复杂但肯定是通用的功能。
中间件函数是可以访问请求对象
(req)
,响应对象(res)
以及应用程序的请求 - 响应周期中的下一个中间件函数的函数。下一个中间件函数通常由名为的变量表示next。
中间件功能:
- 执行任何代码。
- 更改请求和响应对象。
- 结束请求 - 响应周期。
- 调用堆栈中的下一个中间件函数。
如果当前的中间件函数没有结束请求 - 响应周期,则必须调用
next()
以将控制传递给下一个中间件函数。否则,请求将被挂起。
Express应用程序中的中间件类型:
- 应用程序级中间件
- 路由器级中间件
- 错误处理中间件
- 内置中间件
- 第三方中间件
应用程序级中间件
通过使用和函数将应用程序级中间件绑定到app对象的实例,其中是中间件函数以小写形式处理的请求的HTTP方法(例如GET、POST或者PUT)。
简单使用:
const express = require('express');
let app = express()
app.use(function (req, res, next) {
console.log('现在时间是:', Date.now())
next()})
//没有装载路径的中间件功能,每次应用程序收到请求时都会执行该功能。
app.use('/user/:id', function (req, res, next) {
console.log('Req:', req.method)
next()})
//在 /user/:id 路径上安装的中间件功能。对/user/:id路径上的任何类型的HTTP请求执行该函数。
app.get('/user/:id', function (req, res, next) {
res.send('USER')})
//该函数处理对/user/:id路径的GET请求。
app.use('/user/:id', function (req, res, next) {
console.log('Req URL:', req.originalUrl)
next()
}, function (req, res, next) {
console.log('Req:', req.method)
next()})
//使用挂载路径在挂载点加载一系列中间件函数的示例,
//它说明了一个中间件子堆栈,它将任何类型的HTTP请求的请求信息打印到/user/:id路径。
要从路由器中间件堆栈中跳过其余的中间件功能,请调用next(
"route
")
将控制权传递给下一个路由。
app.get('/user/:id', function (req, res, next) {
// 如果用户ID为0,则跳到下一个路由
if (req.params.id === '0') next('route')
// 否则将控件传递给此堆栈中的下一个中间件函数
else next()}, function (req, res, next) {
// 返回数据信息
res.send('1')})
// user/:id路径的处理程序,它发送一个特殊的响应app.get('/user/:id', function (req, res, next) {
res.send('0')})
路由器级中间件
路由器级中间件的工作方式与应用程序级中间件的工作方式相同,但它绑定到的是一个实例express.Router()。
const express = require('express');
const router = express.Router()
//创建路由实例
错误处理中间件
错误处理中间件需要四个参数(err, req, res, next)。必须提供四个参数以将其标识为错误处理中间件函数。即使不需要使用该next对象,也必须指定它以保持签名。该next对象将被解释为常规中间件,并且将无法处理错误。
app.use(function (err, req, res, next) {
console.error(err.stack)
res.status(500).send('错误!')})
内置中间件
Express具有以下内置中间件:
- express.static提供静态资源,如
HTML
文件,图像等。 - express.json使用JSON有效负载解析传入的请求。
- express.urlencoded用URL编码的有效负载解析传入的请求
第三方中间件
可以使用第三方中间件为Express应用程序添加功能
$ npm install cookie-parser
let express = require('express')
let app = express()
let cookieParser = require('cookie-parser')
// 加载cookie解析中间件app.use(cookieParser())