【九月打卡】第6天 Node.js工程师学习笔记
课程名称: Node.js工程师养成计划
课程章节: Node框架实战篇 - Express 中间件与RESTful API 接口规范 (1)
课程讲师: 北瑶
课程内容:
Express中间件的概念与基本应用
在 NodeJS 中, 中间件主要是指封装所有 Http 请求细节处理的方法. 一次 Http 请求通常包含很多工作, 如记录日志, ip 过滤, 查询字符串, 请求头解析, Cookie处理, 权限验证, 参数验证, 异常处理等, 但对于 Web 应用而言, 并不希望接触到这么多细节性的处理, 因此引入中间件来简化和隔离这些基础设施与业务逻辑之间的细节, 让开发者能够关注在业务的开发上, 以达到提升开发效率的目的
中间件的行为比较类似 java 中过滤器的工作原理, 就是在进入具体的业务处理之前, 先让过滤器处理. 它的工作模型
如下:
简单例子:
const express = require('express')
const app = express()
app.get('/', (req, res) => {
console.log('客户端访问啦')
res.send('/')
})
app.get('/register', (req, res) => {
console.log('客户端访问啦')
res.send('/register')
})
如果我想在每一个接口里都加上 console.log('客户端访问啦')
这句代码, 而且有成千上万个接口,不可能每个都手动进行添加吧?
app.use((req, res, next) => { // 挂载
console.log('客户端访问啦')
next() // 继续去执行下面的逻辑处理
})
这样做, 一旦客户端访问了接口, 我们就交个use
这个方法来执行, 这个方法需要写在所有接口的后面, 不然会影响下面代码的执行
Express中间件分类
- 应用程序级别中间件
- 路由级别中间件
- 错误处理中间件
- 内置中间件
- 第三方中间件
app.use('/user', router) // 加前缀
express.router()
使用 express.router
该类创建模块化, 可安装的路由处理程序, 实例是一个 Router 完整的中间件和路由系统
const express = require('express')
const router = express.Router()
// 挂载
router.use((req, res, next) => {
console.log('Time: ', Date.now())
next()
})
router.get('/about', (req, res) => {
res.send('Birds home page')
})
module.exports = router // 暴露
然后, 在应用程序中加载路由器模块
const router = require('./router')
app.use('/api', router)
该应用程序现在将能够处理对/api
和的请求/api/about
,以及调用timeLog特定于路由的中间件函数。
Express路由与响应方法
接收所有请求
app.all('/xx', (req, res) => {
res.send('xxx')
})
字符作用
// ? 号前面可有可无, 都可通过
app.get('/us?er', (req, res) => {})
// + 号前面的字符可以添加无数个 列如: `usssser` 也可通过
app.get('/us+er', (req, res) => {})
// * 号是通配符, us与er之间添加什么都可通过
app.get('/us*er', (req, res) => {})
可使用链式调用
app.get('/',(req, res) => {}).post('/video', (req, res) => {})
项目基础设计搭建优化
const express = require('express')
const app = express()
// 解析客户端发过来的json请求
app.use(express.json()) // 解析get
app.use(express.urlencoded) // 解析post
跨域
安装: npm install cors
app.use(cors())
日志模块
安装: npm install morgan
app.use(morgan('dev'))
Mongoose 数据库模型
Mongoose 对 MongoDB 进行二次封装, 操作更简单
安装: npm install mongoose
const mongoose = require('mongoose')
const main = async () => {
await mongoose.connect('mongodb://127.0.0.1:27017/test')
}
main().then(res => {
console.log('mongo连接成功')
}).catch(err => {
console.log(err)
console.log('mongo连接失败')
})
// 有返回, 没有创建 创建模型对象
const cc = new mongoose.Schema({
username: {
type: String,
required: true
},
age: {
type: Number,
required: true
}
})
// 创建集合 首字母大写
const ccModel = mongoose.model('Cc', cc)
// 向该集合添加数据
const u = new ccModel({username: '赟赟', age: 23})
// 保存
u.save();
用户注册的密码加密
使用md5
加密, node 官方提供了一个 crypto
的一个内置中间件
const crypto = require('crypto')
const d = crypto.createHash('md5').update('by' + '密码').digest('hex')
console.log(d); // 加密之后的密文
客户端提交数据安全效验
安装: npm install express-validator
学习心得
通过这章学习, 明白了, 后端如何接收到前端传入的登录信息与效验
课程截图
共同学习,写下你的评论
评论加载中...
作者其他优质文章