<!doctype html>
readme
TODO项目总结
author:RFQ 2021/07/10 16:25
app.js 的架构
封装以保存代码整洁
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)
const {promisify} = require("util")
const fs = require("fs")
var readfile = promisify(fs.readFile)
var writeFile = promisify(fs.writeFile)
?
exports.getDB = async()=>{
const data = await readFile(‘pathname‘ , ‘utf8‘)
return JSON.parse(data)
}
exports.saveDB = async db=>{
const data = JSON.stringify(db)
await writeFile(‘pathname‘ , data)
}
尽量避免使用同步
尽量少使用不严格等于
配置表单请求
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() 函数则继续进行.
xxxxxxxxxx
app.use((req , res , next )=>{
//.....
next()
})
app.get(‘/path‘ , func(){
})
自定义配置的"问题"
使用一个函数来封装另一个函数可以使得函数的*度更高 , 可以传递自定义配置
xxxxxxxxxx
function json(op){
return (req , res , next)=>{
console.log(op.msg)
for i in (1, op.init_val)
}
}
app.use(json({
msg : "111weaud",
init_val : 45
}));
中间件的级别/分类
应用程序级别
挂载在app上称为 应用程序级别
- 不限制路径
- 限制路径
路由器级别中间件
错误处理中间件
挂载在所有中间件的后面
app.use( (err , req , res , next ) )
为它的声明方法
调用方法名为
xxxxxxxxxx
app.get( ‘/path‘ , (req , res , next)=>{
try{
//....
}
catch(err){
next(err)
}
})
内置中间件
共五个内置中间件
xxxxxxxxxx
express.static() // 挂载静态资源
?
/* **********以下为解析请求体格式********** */
express.raw()
express.json()
express.urlencoded()
express.text()
/* *********解析请求体end*************** */
第三方中间件
express在4.X以前有更多的中间件, 在该版本中精简去只留下5个内置, 剩下的以第三方形式开源在github/npm.org 仓库中
中间件的声明
一类中间件的定义方式
暴露出一个函数, 该函数的返回值是function , 接受 参数( 用户自定义配置 )
xxxxxxxxxx
const mw = require("middleware")
var op = {
xx : "ssd",
yy : "wadjkjd"
}
?
app.use(mw( op ))
中间件的使用
app.use(‘path‘ , func s)
, function可以有很多个, 而且可用数组存储func ,
next() // 往下找中间件
next(‘route‘) // 当前中间件堆栈中的下一个
next(任何数据) //作为错误信息向下发送到错误处理中间件中
404 处理
路由path处理
express路由的path处理使用一个path包进行处理,
可以处理
- 字符串
- 字符串模板
- 正则表达式
res对象终止响应的一些方法
xxxxxxxxxx
var res = {
download()=>{
return
}
};
res.download()
//提醒客户端需要下载某个文件
res.end()
//结束并发送
res.json()
res.jsonp()
//发送json对象
res.redirect()
//重定向
res.render()
res.send()
//发送string / JSON
res.sendFile()
// 发送文件
res.sendStatus()
?