1. Express框架是什么
1.1 Express是一个基于Node平台的web应用开发框架,它提供了一系列的强大特性,帮助你创建各种Web应用。我们可以使用 npm install express 命令进行下载。
1.2 Express初体验
// 引入express框架
const express = require('express');
// 创建网站服务器
const app = express();
app.get('/' , (req, res) => {
// send()
// 1. send方法内部会检测响应内容的类型
// 2. send方法会自动设置http状态码
// 3. send方法会帮我们自动设置响应的内容类型及编码
res.send('Hello. Express');
})
app.get('/list', (req, res) => {
res.send({
name: '张三', age: 20})
})
// 监听端口
app.listen(3000);
console.log('网站服务器启动成功');
2. 中间件
2.1 什么是中间件
- 中间件就是express框架提供的一堆方法,可以接收客户端发来的请求、可以对请求做出响应,也可以将请求继续交给下一个中间件继续处理,即接受请求,处理请求。
- 中间件主要由两部分构成,
中间件方法
以及请求处理函数
。 - 中间件方法由Express提供,负责拦截请求,请求处理函数由开发人员提供,负责处理请求。
//中间件示例
app.get('请求路径', '处理函数') // 接收并处理get请求
app.post('请求路径', '处理函数') // 接收并处理post请求
- 可以针对同一个请求设置多个中间件,对同一个请求进行多次处理。
- 默认情况下,请求从上到下依次匹配中间件,一旦匹配成功,终止匹配。
- 可以调用next方法将请求的控制权交给下一个中间件,直到遇到结束请求的中间件。
//02.中间件.js
//引入express框架
const express = require("express");
//创建网站服务器
const app = express();
//当客户端以get方式访问/request路由时
//第一个中间件
app.get('/request', (req, res, next) => {
req.name = "张三";
next();
});
//下一个中间件
app.get('/request', (req, res) => {
res.send(req.name);
});
//监听端口
app.listen(3000);
2.2 app.use中间件用法
app.use 匹配所有的请求方式,可以直接传入请求处理函数,代表接收所有的请求。
app.use((req, res, next) => {
console.log(req.url);
next();
});
app.use 第一个参数也可以传入请求地址,代表不论什么请求方式,只要是这个请求地址就接收这个请求。
app.use('/request', (req, res, next) => {
console.log(req.url);
next();
});
- 输入
http://localhost:3000
,控制台打印请求走了app.use中间件
- 输入
http://localhost:3000/request
,控制台打印请求走了app.use中间件、请求走了app.use /request中间件
//03.app.use.js
const express = require("express");
const app = express();
//接受所有请求的中间件
app.use((req, res, next) => {
console.log('请求走了app.use中间件');
next()
})
//当客户端访问/request请求时走当前中间件
app.use('/request', (req, res, next) => {
console.log('请求走了app.use /request中间件');
next();
});
app.get('/list', (req, res) => {
res.send('/list');
});
//监听端口
app.listen(3000);
2.3 中间件应用
1.网站维护公告 ,写在最前面,直接为客户端做出响应,网站正在维护中。
// 引入express框架
const express = require('express');
// 创建网站服务器
const app = express();
app.use((req, res, next) => {
res.send('当前网站正在维护...')
})
2.路由保护,客户端在访问需要登录的页面时,可以先使用中间件判断用户登录状态,用户如果未登录,则拦截请求,直接响应,禁止用户进入需要登录的页面。
app.use('/admin', (req