<!doctype html>
readme
TODO项目总结
author:RFQ 2021/07/10 16:25
app.js 的架构
开始 引用所有require,创建express实例 挂载内置处理方法如express.json等 路由处理 404等特殊页面的处理 错误信息中间件处理 app.listen end
封装以保存代码整洁
ES6的封装方法
moudles / export / require
各种约定内容的熟悉
1. 状态码
200 , 202 , 404 ,500 等状态码代表的含义
2. 几种请求方法的约定处理
post / get / patch / delete
• get 查询
• post 新增
• patch 修改
• delete 删除
• put
• all 所有方法
数据处理方法
mysql数据库 / fs文件处理
同步和异步方法的处理
使用promise对象,以免回调地狱
在传统的异步编程中,如果异步之间存在依赖关系,就需要通过层层嵌套回调的方式满足这种依赖,如果嵌套层数过多,可读性和可以维护性都会变得很差,产生所谓的“回调地狱”,而 Promise 将嵌套调用改为链式调用,增加了可阅读性和可维护性.
如果调用的API并不是promise可以使用util工具进行调整
util.promisify 的那些事儿 - 贾顺名 - 博客园 (cnblogs.com)
x 1const {promisify} = require("util")2
const fs = require("fs")3
var readfile = promisify(fs.readFile)4
var writeFile = promisify(fs.writeFile)5
6
exports.getDB = async()=>{7
const data = await readFile('pathname' , 'utf8')8
return JSON.parse(data)9
}10
exports.saveDB = async db=>{11
const data = JSON.stringify(db)12
await writeFile('pathname' , data)13
}
尽量避免使用同步
尽量少使用不严格等于
配置表单请求
app.use(express.json() ) // 配置解析表单请求体:application/json
app.use(express.urlencoded())//配置解析表单请求体:application/x-www-form-urlencoded
搭配post等请求有: var data = req.body 即可直接使用之为JSON对象
配置路由时, 可以使用正则的方法配置请求路径。其中的参数在express中以params对象中存储
app.get('todos/:id' , (req,res)=>{ var id = req.params.id ; })
中间件的使用是有顺序的
按照顺序向下查找匹配的路由
如果res.send则结束,
如果有next() 函数则继续进行.
xxxxxxxxxx8 1
app.use((req , res , next )=>{2
//.....3
4
next()5
})6
app.get('/path' , func(){7
8
})
自定义配置的"问题"
使用一个函数来封装另一个函数可以使得函数的*度更高 , 可以传递自定义配置
xxxxxxxxxx10 1
function json(op){2
return (req , res , next)=>{3
console.log(op.msg)4
for i in (1, op.init_val)5
}6
}7
app.use(json({8
msg : "111weaud",9
init_val : 4510
}));
中间件的级别/分类
应用程序级别
挂载在app上称为 应用程序级别
- 不限制路径
- 限制路径
路由器级别中间件
错误处理中间件
挂载在所有中间件的后面
app.use( (err , req , res , next ) )
为它的声明方法
调用方法名为
xxxxxxxxxx8 1
app.get( '/path' , (req , res , next)=>{2
try{3
//....4
}5
catch(err){6
next(err)7
}8
})
内置中间件
共五个内置中间件
xxxxxxxxxx8 1
express.static() // 挂载静态资源2
3
/* **********以下为解析请求体格式********** */4
express.raw()5
express.json()6
express.urlencoded()7
express.text()8
/* *********解析请求体end*************** */
第三方中间件
express在4.X以前有更多的中间件, 在该版本中精简去只留下5个内置, 剩下的以第三方形式开源在github/npm.org 仓库中
中间件的声明
一类中间件的定义方式
暴露出一个函数, 该函数的返回值是function , 接受 参数( 用户自定义配置 )
xxxxxxxxxx7 1
const mw = require("middleware")2
var op = {3
xx : "ssd",4
yy : "wadjkjd"5
}6
7
app.use(mw( op ))
中间件的使用
app.use('path' , func s)
, function可以有很多个, 而且可用数组存储func ,
next() // 往下找中间件
next('route') // 当前中间件堆栈中的下一个
next(任何数据) //作为错误信息向下发送到错误处理中间件中
404 处理
路由path处理
express路由的path处理使用一个path包进行处理,
可以处理
- 字符串
- 字符串模板
- 正则表达式
res对象终止响应的一些方法
xxxxxxxxxx21 1
var res = {2
download()=>{3
return4
}5
};6
res.download()7
//提醒客户端需要下载某个文件8
res.end()9
//结束并发送10
res.json()11
res.jsonp()12
//发送json对象13
res.redirect()14
//重定向15
res.render()16
res.send()17
//发送string / JSON18
res.sendFile()19
// 发送文件20
res.sendStatus()21