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