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) => {})
必须放最所有路由上面,当下面路由都没有匹配到门路时会执行
发表回复