• 首页

  • 文章归档

  • 关于页面

  • 友链
潇 潇 暮 雨
潇 潇 暮 雨

潇潇暮雨

获取中...

10
10
Node.js

路由及中间件学习笔记

发表于 2019-10-10 • 被 296 人看爆

Express中的路由

在 Express 中,路由指的是客户端的请求与服务器处理函数之间的映射关系。
Express 中的路由分3 部分组成,分别是请求的类型、请求的URL 地址、处理函数,格式如下:

// 挂载路由
app.get('/', (req, res) => {
  res.send('hello world.')
})
app.post('/', (req, res) => {
  res.send('Post Request.')
})

路由的使用

1. 最简单的用法

const express = require('express')
const app = express()

// 挂载路由
app.get('/', (req, res) => {
  res.send('hello world.')
})
app.post('/', (req, res) => {
  res.send('Post Request.')
})

app.listen(80, () => {
  console.log('http://127.0.0.1')
})

2.模块化路由
为了方便对路由进行模块化的管理,Express 不建议将路由直接挂载到app 上,而是推荐将路由抽离为单独的模块。
将路由抽离为单独模块的步骤如下:
① 创建路由模块对应的 .js 文件
② 调用 express.Router() 函数创建路由对象
③ 向路由对象上挂载具体的路由
④ 使用 module.exports 向外共享路由对象
⑤ 使用 app.use() 函数注册路由模块
3.创建路由模块

// 1. 导入 express
const express = require('express')
// 2. 创建路由对象
const router = express.Router()

// 3. 挂载具体的路由
router.get('/user/list', (req, res) => {
  res.send('Get user list.')
})
router.post('/user/add', (req, res) => {
  res.send('Add new user.')
})

// 4. 向外导出路由对象
module.exports = router

4.注册路由模块

// 1. 导入路由模块
const router = require('./03.router')
// 2. 注册路由模块
app.use(router)

5.为路由模块添加前缀
类似于托管静态资源时,为静态资源统一挂载访问前缀一样,路由模块添加前缀的方式也非常简单:

// 1. 导入路由模块
const router = require('./03.router')
// 2. 注册路由模块
app.use('/api', router)

中间件的概念

中间件(Middleware ),特指业务流程的中间处理环节。

app.get('/'.(req,res,next)=>{
  console.log('ok!')
  next()
})

中间件的使用注意事项
① 一定要在路由之前注册中间件
② 客户端发送过来的请求,可以连续调用多个中间件进行处理
③ 执行完中间件的业务代码之后,不要忘记调用next() 函数
④ 为了防止代码逻辑混乱,调用next() 函数后不要再写额外的代码
⑤ 连续调用多个中间件时,多个中间件之间,共享 req 和 res 对象

中间件的分类

Express 官方把常见的中间件,分成了5 大类,分别是:
① 应用级别的中间件
② 路由级别的中间件
③ 错误级别的中间件
④ Express 内置的中间件
⑤ 第三方的中间件

1.应用级别的中间件
通过 app.use() 或 app.METHOD() 函数,绑定到app 实例上的中间件,叫做应用级别的中间件,代码示例如下

const app=express()

app.use((req,res,next)=>{ //应用级别的中间件
 console.log('Time',Date.now())
 next()
})

app.get('/',(req,res,next)=>{
   console.log('ok')
   next()
})

2. 路由级别的中间件
绑定到 express.Router() 实例上的中间件,叫做路由级别的中间件。它的用法和应用级别中间件没有任何区别。只不过,应用级别中间件是绑定到 app 实例上,路由级别中间件绑定到router 实例上,代码示例如下:

const app=express()
const router=express.Router()
//路由级别的中间件
router.use((req,res,next)=>{ 
 console.log('Time',Date.now())
 next()
})
app.use("/",router)

3. 错误级别的中间件
错误级别的中间件function 处理函数,必须有4 个形参,形参顺序从前到后,分别是(err, req, res, next)。

app.get('/',(req,res)=>{
 throw new Error('服务器内部发生了错误!')//抛出一个自定义错误
res.send('Home Page') 
})

app.use((err, req, res, next)=>{
 console.log('发生了错误:'+err.message)//在服务器打印错误消息
 res.send('Error!'+err.message)//在客户端响应错误相关的内容
})

4. Express内置的中间件
自 Express 4.16.0 版本开始,Express 内置了 3 个常用的中间件,极大的提高了Express 项目的开发效率和体验:
① express.static快速托管静态资源的内置中间件,例如:HTML 文件、图片、CSS 样式等(无兼容性)
② express.json解析 JSON 格式的请求体数据(有兼容性,仅在4.16.0+ 版本中可用)
③ express.urlencoded 解析 URL-encoded 格式的请求体数据(有兼容性,仅在4.16.0+ 版本中可用)

//配置解析 application/json 格式数据的内置中间件
app.use(express.json())

//配置解析 application/x-www-form-urlencoded 格式数据的内置中间件
app.use(express.urlencoded({extended:false}))

5. 第三方的中间件
非 Express 官方内置的中间件,而是由第三方开发出来的Express 中间件,叫做第三方中间件。在项目中,大家可以 按需下载并配置第三方中间件,从而提高项目的开发效率。
例如:除了使用 express.urlencoded 这个内置中间件来解析请求体数据,还可以使用body-parser 这个第三方中间 件,来解析请求体数据。使用步骤如下:
① 运行 npm install body-parser安装中间件
② 使用 require 导入中间件
③ 调用 app.use() 注册并使用中间件
注意:Express 内置的 express.urlencoded中间件,就是基于body-parser 这个第三方中间件进一步封装出来的。

数据库学习笔记
Express笔记整理
  • 文章目录
  • 站点概览
潇潇暮雨

小姐姐潇潇暮雨

逗比肖~

Copyright © 2022 潇潇暮雨 · 19043744

Proudly published with Halo · Theme by ruby woo · RSS