Express总结
安装
基本用法
Requet对象
Response对象
路由
中间件
错误处理中间件
什么是错误处理中间件
专门处理错误的中间件
有4个参数:err,req,res,next
这4个参数必须存在,即使不用也不能省略,因为源码中是通过4个参数个数是不是4来判断这是什么中间件,是4的话就是错误处理中间件
(err,req,res,next)=>{
如何将错误传递给错误处理中间件
在出错的地方调用next(错误或错误信息)把错误传递给错误处理中间件
next('route')会跳转到下一个路由,不会把错误传递给错误处理中间件
第三方中间件
在响应中设置cookie
Set-Cookie
res.set('Set-Cookie','username=simon;Max-Age=3');
Max-Age=3 单位是s
使用第三方中间件cookie-parser处理请求中的cookie
npm install cookie-parser
会将请求中的cookie处理后放入req.cookies中
Express内置中间件
处理请求体中application/x-www-form-urlencoded格式的数据
express.urlencoded();
extended必须传参数{extended:false}
extended:false 表示内部使用querystring模块,推荐
extended:true 表示内部使用qs模块
qs模块可以解析更复杂的字符串,这里没必要使用
qs: https://www.npmjs.com/package/qs
处理请求体中application/json格式的数据
express.json();
提供静态资源
通过/static 来访问静态资源
app.use('/static',express.static(path.join(__dirname,'public')));
const path=require('path');
express.static(path)
app.use(express.static(path.join(__dirname,'public')));
Router级中间件
user中间件
使用router.use()方法将中间件提供给Express调用
use()方法的第一个参数默认是/,可以省略
use()方法可以匹配所有的HTTP方法
use()方法匹配的路径的规则为:从头包含匹配
可以给同一个路径注册多个中间件函数
可以在一个use()方法中注册多个中间件函数
METHOD和all中间件
使用router.METHOD()方法或router.all()方法将中间件提供给Express调用
router.METHOD()具体指:router.get()、router.post()、router.put()、router.delete()等方法
METHOD()或all()方法的第一个参数都要写出来,不能省略
METHOD()方法可以匹配所有的HTTP方法,all()方法会匹配所有的HTTP方法
METHOD()方法或all()匹配的路径的规则为:路径相等匹配
可以给同一个路径注册多个中间件函数
可以在一个METHOD()方法或all()方法中注册多个中间件函数
可以通过next('route')跳到下一个路由
next('route')只会在METHOD()或all()方法中起作用
Router级中间件的应用
App级中间件的应用
处理请求体中application/x-www-form-urlencoded格式的数据
处理请求体中application/json格式的数据
App级中间件
use中间件
使用app.use()方法将中间件提供给Express调用
use()方法的第一个参数默认就是'/',可以省略
use()方法可以匹配所有的http中的方法(get/post/delete/put……)
use()方法匹配路径的规则为:从头包含匹配
可以给同一个路径注册多个中间件函数
可以在一个use()方法中注册多个中间件函数
METHOD和all中间件
使用app.METHOD()或app.all()方法将中间件直接提供给Express调用
app.METHOD()具体指:app.get()、app.post()、app.put()、app.delete()等
METHOD()或all()方法第一个参数都要写出来,不能省略
METHOD()方法会匹配对应的HTTP方法,all()方法会匹配所有的HTTP方法
METHOD()或all()方法匹配路径的规则为:路径相等匹配
可以给同一个路径注册多个中间件函数
可以在一个METHOD()或all()方法中注册多个中间件函数
可以通过next('route')跳转下一个路由
next('route')只会在METHOD()或all()中起作用
认识中间件
中间件的地位
Express是一个路由和中间件的Web框架
Express应用本质就是一系列中间件函数的调用
什么是中间件
函数
Express调用的函数
函数调用时会被Express传入3个参数:req、res、next
中间件有什么用
将一个请求的处理过程,分解到多个中间件中,每个中间件专门干一件事
使代码逻辑清晰,便于维护
中间件可以做什么
可以执行任何代码
更改req和res对象
结束请求-响应周期
调用stack栈中的下一个中间件
中间件函数的调用机制
匹配上的中间件会按顺序执行
一次执行一个中间件,如果要执行下一个匹配上的中间件,调用next()
如果当前中间件没有结束请求-响应周期,必须调用next()
中间件的分类
App级中间件
Router级中间件
Express内置中间件
第三方中间件
错误处理中间件
路由
什么是路由
路由指的是:客户端使用特定的HTTP方法(GET、POST、PUT、DELETE等)对特定路径(/、/login等)发送请求,应用程序要如何响应
基础路由
app.get('/',(req,res)=>{ res.send('Hi'); }); app.post('/user/login',function(req,res){ res.send('登录成功'); }); app.put('/dynamic',(req,res)=>{ res.send('动态更新成功'); }); app.delete('/dynamic',(req,res)=>{ res.send('动态删除成功'); }) app.get('/dynamic',(req,res)=>{ res.send('动态获取成功'); });
使用Router管理路由
const userRouter=express.Router(); const dynamicRouter=express.Router(); const commentRouter=express.Router(); userRouter.post('/user/register',(req,res)=>{ res.send('注册成功 userRouter'); }); userRouter.post('/user/login',(req,res)=>{ res.send('登录成功 userRouter'); }); app.use(userRouter); userRouter.post('/register',(req,res)=>{ res.send('注册成功 userRouter'); }); userRouter.post('/login',(req,res)=>{ res.send('登录成功 userRouter'); }); const userRouter=require('./router/user'); app.use('/user',userRouter);
响应动态页面
1.安装ejs模板引擎 npm install ejs
2.在Express中使用ejs模板引擎
2.1.设置模板所在的目录,默认是views
app.set('views',path.join(__dirname,'view'));
2.2.设置默认的模板后缀名,省略不写的时候有用
app.set('view engine','ejs'); app.set('view engine','html');
2.3.设置指定后缀名的文件使用什么模板引擎
app.engine('html',require('ejs').__express);
2.4.使用res.render()渲染模板
res.render('user',{ id, title:'用户 ${id} 的首页', html:'<h1>我是HTML字符串</h1>', user:[ { username:'simon', gender:'male' }, { username:'wanisha', gender:'female' } ] });
Response对象
Response对象的属性
console.log(res.app===app,req.res===res);
Response对象的方法
res.redirect('/login')
res.sendStatus(404);
res.status(404).send("没有找到该页面");
res.set('Content-type','text/plain;charset=utf-8');
res.sendFile(path.join(__dirname,'public','index.html'));
res.send("Hi Express");
Resquest对象
Request对象的属性
req.url
req.path
req.query
req.method
req.headers
Request对象的方法
req.get("user-agent")
req.header("User-agent")
Express的基本用法
使用Express搭建Web服务器
const express=require('express');
const app=express();
const port=4000;
app.listen(port,function(){ console.log('服务器在 ${port} 端口启动成功');})
使用nodemon自动重启服务器
npm install -g nodemon
nodemon xx.js 自动重启服务器
package.json 配置 "start": "nodemon xx.js" npm start
使用postman发送请求
安装Express
直接安装 npm init(package.json)npm install Express
通过Express提供的脚手架安装 npm install -g Express-generator/ Express generator 自动生成项目目录 npm install 安装依赖 npm start 启动服务
初识Express
什么是Express
基于Node.js的框架,能够帮助我们快速搭建Web服务器
对http模块进行了封装,简化了很多操作
为什么要使用Express
原生开发Web服务器比较繁琐
使用Express可以省去这些繁琐的操作,只关注核心业务逻辑
使用Express能做什么
提供静态资源
提供动态资源
提供接口和数据
Express就是能够帮助我们搭建服务器
撒打算
从Node.js v14.0.0开始,querystring模块已经被移出Node.js核心模块,成为了一个独立的npm包。因此,如果你在使用较新版本的Node.js,你需要通过npm或yarn来安装这个包。
npm install querystring
这里很不错