【Node.js工程师养成计划】之express中间件与接口规范

一、Express中间件的概念与基本应用

javascript 复制代码
const express = require('express')

// 加一个注释,用以说明,本项目代码可以任意定制更改
const app = express()

const PORT = process.env.PORT || 3000

// // 挂载路由
// app.use('/api', router)

// // 挂载统一处理服务端错误中间件
// app.use(errorHandler())

app.get('/', (req, res) => {
  console.log(`${req.method}, ${req.url}, ${Date.now()}`);
  res.send('/index')
})

app.get('/register', (req, res) => {
  console.log(`${req.method}, ${req.url}, ${Date.now()}`);
  res.send('/iregisterdex')
})

app.get('/login', (req, res) => {
  console.log(`${req.method}, ${req.url}, ${Date.now()}`);
  res.send('/login')
})

app.listen(PORT, () => {
  console.log(`Server is running at http://localhost:${PORT}`)
})

封装个方法:

javascript 复制代码
const express = require('express')

// 加一个注释,用以说明,本项目代码可以任意定制更改
const app = express()

const PORT = process.env.PORT || 3000

function logs(req) {
  console.log(`${req.method}, ${req.url}, ${Date.now()}`);
  console.log(`${req.method}, ${req.url}, ${Date.now()}`);
  console.log(`${req.method}, ${req.url}, ${Date.now()}`);
}

app.get('/', (req, res) => {
  logs(req)
  res.send('/index')
})

app.get('/register', (req, res) => {
  logs(req)
  res.send('/iregisterdex')
})

app.get('/login', (req, res) => {
  logs(req)
  res.send('/login')
})

app.listen(PORT, () => {
  console.log(`Server is running at http://localhost:${PORT}`)
})

发现也并不完美

写个中间件

javascript 复制代码
const express = require('express')

// 加一个注释,用以说明,本项目代码可以任意定制更改
const app = express()

const PORT = process.env.PORT || 3000

app.use((req, res, next) => {
  console.log(`${req.method}, ${req.url}, ${Date.now()}`);
  next()
})

// // 挂载路由
// app.use('/api', router)

// // 挂载统一处理服务端错误中间件
// app.use(errorHandler())

// 中间件写在要使用的逻辑前面
app.get('/', (req, res) => {
  res.send('/index')
})

app.get('/register', (req, res) => {
  res.send('/register')
})

app.get('/login', (req, res) => {
  res.send('/login')
})

app.listen(PORT, () => {
  console.log(`Server is running at http://localhost:${PORT}`)
})

二、不同中间件类别的使用方式

中间件分类:

  • 应用程序级别中间件
  • 路由级别中间件
  • 错误处理中间件
  • 内置中间件
  • 第三方中间件

1、应用程序级别中间件

javascript 复制代码
const express = require('express')
const app = express()

const PORT = process.env.PORT || 3000

// 以下3个都是应用程序级别中间件
app.use((req, res, next) => {
  console.log(`${req.method}, ${req.url}, ${Date.now()}`);
  next()
})

app.get('/', (req, res) => {
  res.send('/index')
})

app.get('/user', (req, res, next) => {
  console.log(req.method)
  next()
}, function (req, res, next){
  console.log('666')
  next()
  res.send('/user')
})

app.listen(PORT, () => {
  console.log(`Server is running at http://localhost:${PORT}`)
})

2、路由级别中间件

router/index.js

javascript 复制代码
const express = require('express')

const router = express.Router()

router.get('/', (req, res) => {
  console.log(req.methods)
  res.send('/index')
})

router.get('/user', (req, res) => {
  console.log(req.methods)
  res.send('/user')
})

module.exports = router

app.js

javascript 复制代码
const express = require('express')
const app = express()
const router = require('./router/index')
const routerVideo = require('./router/video')

const PORT = process.env.PORT || 3000

// 挂载路由
// app.use(router)
app.use('/api', router) // 添加前缀
// app.use('/video', routerVideo) // 添加前缀

app.listen(PORT, () => {
  console.log(`Server is running at http://localhost:${PORT}`)
})

3、错误处理中间件

javascript 复制代码
// 错误处理中间件
app.use((err, req, res, next) => {
  console.log(err)
  res.status(500).send('service Error')
})

4、 内置中间件

内置中间件

javascript 复制代码
// app.use(express.urlencoded())
app.use(express.json())

5、第三方中间件

第三方中间件

三、Express路由与响应方法

正在更新。。。

相关推荐
65岁退休Coder2 小时前
PI Agent 开发一个生产级 Harness
后端·node.js·agent
szephyr3 小时前
WebSocket 实战:心跳、断线重连、鉴权,一次讲清
前端·websocket·node.js·长连接·实时通信
秋秋小事4 小时前
node postgreSQL的select与include
node.js
ID34610744204 小时前
【课程设计】基于Spring Boot+Vue的游戏账号租赁系统的设计与实现-计算机毕设 附源码50345
javascript·vue.js·spring boot·python·node.js·php·课程设计
柚yuzumi5 小时前
彻底搞懂 JavaScript 类型转换:显式转换、隐式转换与 ToPrimitive
前端·javascript·node.js
cpolar技术支持9 小时前
本地登录正常,公网却掉线?Express Session 经 cpolar HTTPS 访问的 Cookie 排障实战
node.js·express·cpolar·cookie·session
秋秋小事9 小时前
node prisma+postgreSQL数据库事务
node.js
badhope11 小时前
C++、Node.js、Python 写最小 HTTP 服务谁快?我实测了 6 万次请求
node.js
2401_8685347811 小时前
网络安全法规
安全·中间件
console.log('npc')12 小时前
03 — 核心框架:App 与中间件
后端·node.js·express