目录
- Express
- Application
- Request
- Response
- Router
1. Express ——
生成express 应用,Express.js框架内置的中间件
主要APi:
- express.json() —— 将常用的几种请求体转为Json字符串。
- express.static('root',[options]) —— root是最外层的目录名,中间件会自动根据提供的路径来寻找对应的执行文件,options参数不是必传,设置一些属性,其原理如下:
express.static('root') /** * 上面代码的原理是:如果有root路径,就会执行如果没有会执行next()函数 /** if(root){ 执行root路径下的文件 }else{ next() }
- express.row() —— row单词字面意思为加工,将二进制的请求转换为可读的类型,比如文件上传。
- express.Router() —— 生成一个router对象
- express.text() —— 如果上传的是一个普通文本,则将其转为正常的request Body
- express.urlencoded —— 该api与请求头有关,如果请求头是x-www-form-urlencoded,那么此api将请求体中的信息转为JSON 对象。
2. Application ——
主要用于应用设置、模板引擎、中间件、挂载路由等场景中。
主要API
- app.set('name','qinglin') —— 以key value 的形式设置请求头中的属性,一般放在中间件的头部才会生效
- app.get('name') —— 获取app.set()中设置的属性
- app.post('path',[callback]) —— callBack一般形式为:
(req,res,next,[error])=> {}
app.set() —— 设置的比较特殊的两个属性为:views和view engine:
app.set('views','/path') // 渲染引擎会自动渲染改路径下的视图文件
app.set('view engine','ejs/pug/ets') // 设置渲染引擎,有 ejs pug ets等
- app.put() 、app.delete()、app.patch()都与app.post()的用法一致
- app.render() —— 渲染视图引擎,app.set()设置的配置通过试图引擎解析,然后通过app.render() api 来渲染
- app.use() —— 创建中间件的api, 最通用的api,app.use()也可以设置一些特殊的属性,比如:
app.use(express.json()) ap.use('routerPath',router) // 把routerPath文件挂载到router上 ......
- app.listen() // 监听端口号,具体用法如下:
app.listen(3000,callback) // 第一个参数为监听的端口号,第二个参数是回调函数
3. Request ——
创建请求的应用,通常作为app.use()api的回调函数的第一个参数,Request对象即普通的http请求对象,通常有参数、请求头、请求体等组成,该对象涵盖了http请求对象的所有属性和方法
主要APi:
- req.get('Content-Type') —— 获取请求头中的信息,括号中的值默认不分大小写
- req.param('name') —— 获取请求路由参数,默认获取的是数组形式的数据,也可以是对象形式获取,比如路径是/user/:name,那么可以通过req.params.name的方式获取name 的值
- req.range() —— 请求范围标头解析器,是指定能请求服务器资源的最大范围,返回一个范围数组
具体用法如下:
req.range('size',[options]) // size为请求资源的最大范围,options参数为具有合并属性的对象
4. Response ——
创建请求的应用,通常作为app.use()api的回调函数的第一个参数,Request对象即普通的http请求对象,通常有参数、请求头、请求体等组成,该对象涵盖了http请求对象的所有属性和方法
主要APi:
- Res.send() —— 将响应的数据一次性响应出来,所以不能和Res.write() APi 一起使用
- Res.write() —— 将响应的数据以流的形式响应出来,所以不能和Res.send() APi 一起使用
- Res.set() —— 设置响应头中的属性
- Res.get() —— 获取响应头中的属性
- Res.headersSend() —— 获取响应状态
- Res.format(obj) —— 一个url返回不同格式的响应数据,用法:
Res.format({ '/user',() => { res.send('/user') }, '/blog',() => { res.send('/blog') }, '/login',() => { res.send('/login') }, default:() => { res.status().send(‘默认值’) } })
- Res.status('200','ok') —— 括号里的值对应http 状态值,比较特殊的值有304,如果值为304,那么在执行中间件时该对象对自动执行response.location(‘path’)api.
- Res.redirect([status],path) —— 如果status == 301,则会自动重定向到path,所以使用这个api就不用使用res.status('301',path) 和Res.location(path) 方法了
5. Router ——
Router是一个单独的实例,用来做路由的,Router可以当做一个小型的子应用,它是单纯的操作路由的,这个路由可以挂载到app上
- Router 对象是由Express.Router()方法来创建
const express = require('express')
const Router = express.Router()
主要APi:
Router 对象的常用方法与application方法类似,常用的有:
- Router.use('outerPath',miawareApp) —— outerPath 是 中间件midwareApp 的最外层的路径,midwareApp可以是模块化的中间件,例如:
const express = require('express')
const Router = express.Router()
const midwareApp = require('midwareApp') // midwareApp是一个从其他地方引进来的中间件,其目录结构为:outerPath/midwareApp,一般情况下outerPath是单独的一个文件夹,里面可能有多个midwareApp.js等模块化的中间件文件
Router.use('outerPath',midwareApp) // outerPath是midwareApp所处的最外层的目录路径
/**
* 通用方法为如下:
**/
express.Router.Router.use(path,callback)
const callBack = (req,res,next) => {
req.xxx()
res.xxx()
next()
}
- 其他的api 与application的常用api的用法类似