node.js-express 知识点小结

<!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         1
  const {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() 函数则继续进行.

     
xxxxxxxxxx
8         1
app.use((req , res , next )=>{
2
    //.....
3
    
4
    next() 
5
})
6
app.get('/path' , func(){
7
        
8
})
   

自定义配置的"问题"

使用一个函数来封装另一个函数可以使得函数的*度更高 , 可以传递自定义配置

 

     
xxxxxxxxxx
10         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 : 45
10
}));
   

 

中间件的级别/分类

应用程序级别

挂载在app上称为 应用程序级别

  1. 不限制路径
  2. 限制路径

路由器级别中间件

 

错误处理中间件

挂载在所有中间件的后面

app.use( (err , req , res , next ) ) 为它的声明方法

调用方法名为

     
xxxxxxxxxx
8         1
app.get( '/path'  , (req , res , next)=>{ 
2
    try{
3
    //....    
4
    }
5
    catch(err){
6
        next(err)
7
    }
8
})
   

内置中间件

共五个内置中间件

     
xxxxxxxxxx
8         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 , 接受 参数( 用户自定义配置 )

     
xxxxxxxxxx
7         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包进行处理,

可以处理

  1. 字符串
  2. 字符串模板
  3. 正则表达式

res对象终止响应的一些方法

     
xxxxxxxxxx
21         1
var res = {
2
    download()=>{
3
    return 
4
}
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 / JSON
18
res.sendFile()
19
// 发送文件
20
res.sendStatus()
21
   

 

 

上一篇:Android - 传统蓝牙(蓝牙2.0)


下一篇:win32获取浏览器当前Tab的URL