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
这里很不错