day26-express
概念:基于nodejs的http服务器封装好的框架
*一、使用步骤
下载:npm init ---->npm i express
导出:const express = require('express')
创建服务器:const app = express()
监听端口号:app.listen(端口号)
处理请求
二、请求的处理
***1.路由方法-----针对不同的请求方式,有不同的方法处理
get post put delete all(处理任意请求,需完全匹配) use(处理任意请求,匹配开头)
2.路径匹配
完全匹配
不完全匹配---?---修饰前面字符最多出现一次
不完全匹配---+---修饰前面字符最少出现一次
不完全匹配---*---表示*占位的这个地方可以是任意内容
正则匹配---使用正则表达式代表路径
***restful风格路径---路径/:id-则此时id必传;路径/:id?-此时id非必传
传统方式请求路径的get传递参数获取-----req.qurey
restful风格传递参数获取-----req.params
3.处理函数
使用一个函数处理此次请求
使用多个函数处理此次请求---最后一个函数前面的所有函数都需要添加第三个参数next,调用next函数才能执行下一步
将多个函数放在一个数组中,用数组处理请求
数组+函数
通过路由器对象处理
创建:router = express.Router()
app用use让路由对象处理:app.use(路径,router)
router处理跟app处理语法一致----router.get();router.post()
路由器模块化:利用use方法和路由器对象,将处理的具体代码放在其他文件中,方便分工合作
注意:完整路径 - use路径 = router路径
***4.请求信息
请求方法:req.method
客户端ip:req.ip
请求头:req.headers
请求路径:req.url
***响应方法
res.end:没有响应头的内容
res.send:带有响应头的内容
res.json:数组或对象内容
res.redirect:跳转到其他路由
res.sendFile:读取页面并响应
内置变量:__dirname:代表当前文件所在文件夹的绝对路径
res.sendStatus:设置响应状态码
*三、中间件
概念:在最后一次响应之前,所经历的那些函数就叫中间件-----中间件函数一定有next
1.内置中间件
静态资源托管:app.use(路径,express.static(静态资源文件夹))
全局内置中间件-----获取post传递的数据
app.use(express.uelencoded({extended:false}))----将post来的数据放在req上,req.body
局部中间件---将代码放到局部的参数中,只在当前作用域有效
2.自定义中间件
自定义获取post数据的中间件,中间件的req和最终执行函数中的req是同一个,所以可以在中间件给req添加属性,在最终路由的req就能获取到这个数据
3.第三方中间件
下载模块:npm i body-parser
导入这个模块:const bodyParser = require('body-parser')
使用这个中间件:app.use(bodyParser.urlencoded({extended:false}))
4.异常处理中间件
app.use((err,req,res,next) => {})----err是报错信息
必须放在所有路由下面---当上面的路由报错了会在这里捕捉到错误并执行
5.404中间件
app.use((req,res,next) => {})
必须放最所有路由下面,当上面路由都没有匹配到路径时会执行
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。