express简介
express是基于node.js平台,快速、开放、极简的web开发框架,是一个第三方的包;
express可以提供网页服务和接口;
使用express搭建基本的服务器
安装express npm i express@4.17.1
(@4.17.1是版本号)
const express = reequire('express');
const app = express();
app.listen(80, () => {
console.log('server running at http://127.0.0.1:80');
});
express监听请求
// req: request 请求对象; res: response 响应对象
app.get(路径, function (req, res) {});
app.post(路径, function (req, res) {});
express响应数据
在监听事件的处理函数中,通过形参来获取请求对象和响应对象;
响应对象.send()
发送响应数据;这个方法支持返回字符串、对象、数组等多种数据格式,并且可以自动解决中文的乱码;对象和数组会自动转化为json格式的字符串;
express获取参数
get请求的查询参数可以用req.query
得到,得到的参数格式是一个对象;
路径参数可以用req.params
得到,得到的参数也是一个对象;
路径参数:
/user/:uname/:age
—— 用 :
拼接的就是路径参数
express托管静态资源
app.use(express.static(资源路径));
app.use('/url前缀', express.static(资源路径));
// 注意:1.静态资源可以托管多个
// 2.如果静态资源访问路径相同,以先托管的为准
// 3.默认开发资源中的index.html
express路由
路由:路由就是url请求地址与服务器处理函数之间的对应关系;
路由的基本使用:
直接挂载在app实例上:
const express = require('express');
const app = express();
app.get('/', (req, res) => {
res.send('Hello World!');
});
app.listen(80);
模块化路由:
// 创建路由模块
const express = require('express');
const router = express.Router();
// 挂载路由在router上
router.get('/user/list', (req, res) => {
res.send('用户列表数据');
});
// 向外暴露路由模块
module.exports = router;
// 在需要使用路由模块的js文件中引入路由模块
const router = require('./router.js');
app.use(router);
app.use('/api', router);
// 路由模块挂载可以加前缀,一个服务器可以挂载多个路由模块
express中间件
中间件:指业务流程中间的处理环节,本质是一个函数,中间件的形参列表中,必须包含一个next参数,next函数是实现多个中间件连续调用的关键,它表示把流转关系转交给下一个中间件或路由;
中间件的作用:在上游的中间件中,统一处理某些操作,方便下游的中间件或路由使用完成业务;
定义中间件
function middleware(req,res,next) {
console.log('这是一个中间件函数');
next();
}
中间件可以使用多个,在app.use中使用就是全局的中间件,在路由中使用就是局部的中间件;
全局中间件:
app.use((req,res,next) => {
console.log('这是一个中间件函数');
next();
});
局部中间件:
定义多个局部中间件时可以将中间件函数写在一个数组内;
app.get('/',(req,res,next) => {
console.log('这是一个中间件函数');
next();
},(req, res) => {
res.send('数据');
});
中间件的特点
1.next函数;中间件必定包含一个next函数,并在函数结束的时候调用next函数;
2.中间件有先后顺序;
3.多个中间件使用的req和res参数是同一个;
中间件的分类和注意事项
中间件分为五类:应用级别中间件、路由级别中间件、错误级别中间件、express内置中间件、第三方中间件;
应用级别中间件就是直接绑定在app
实例上的中间件;
路由级别的中间件就是绑定在express.Router()
实例上的中间件;
错误级别的中间件是用来捕获项目中发生的异常错误,防止项目崩溃的问题,错误级别中间件的function处理函数中有4个形参,分别是(err, req, res, next)
;
注意:错误级别中间件必须在所有路由之后
express内置中间件
express.static
: 托管静态资源;
express.json
:处理post请求提交的json数据,使用req.body接收;
app.use(express.json());
app.post('/', (req,res) => {
const body = req.body;
});
express.urlencoded
:处理post请求提交的表单数据,使用req.body接收;
app.use(express.urlencoded({ extended: false }));
app.post('/', (req,res) => {
const body = req.body;
});
第三方中间件:第三方开发出来的中间件;
注意事项:
1.除了错误级别中间件,其余中间件必须在路由之前注册;
2.客户端发送的请求,可以连续调用多个中间件进行处理;
3.执行完中间件的代码后,必须调用next
函数;
4.next函数的调用之后不允许再写代码;
5.多个中间件共享相同的req和res参数;