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.params3.处理函数 应用一个函数解决此次申请 应用多个函数解决此次申请---最初一个函数后面的所有函数都须要增加第三个参数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:设置响应状态码
*三、中间件
概念:在最初一次响应之前,所经验的那些函数就叫中间件-----中间件函数肯定有next1.内置中间件 动态资源托管: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) => {}) 必须放最所有路由上面,当下面路由都没有匹配到门路时会执行