<!doctype html>
readme
author:RFQ 2021/07/10 16:25
app.js 的架构
开始 引用所有require,创建express实例 挂载内置处理方法如express.json等 路由处理 404等特殊页面的处理 错误信息中间件处理 app.listen end
moudles / export / require
200 , 202 , 404 ,500 等状态码代表的含义
post / get / patch / delete
• get 查询
• post 新增
• patch 修改
• delete 删除
• put
• all 所有方法
mysql数据库 / fs文件处理
在传统的异步编程中,如果异步之间存在依赖关系,就需要通过层层嵌套回调的方式满足这种依赖,如果嵌套层数过多,可读性和可以维护性都会变得很差,产生所谓的“回调地狱”,而 Promise 将嵌套调用改为链式调用,增加了可阅读性和可维护性.
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对象
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(任何数据) //作为错误信息向下发送到错误处理中间件中
express路由的path处理使用一个path包进行处理,
可以处理
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