0
点赞
收藏
分享

微信扫一扫

Node.js(五)

weipeng2k 2022-01-09 阅读 60

一、Express路由

1、路由的概念

2、Express中的路由

 3、路由的匹配过程

4、Express路由最简单的用法

案例代码

const express = require('express')
// 创建 web 服务器,命名为 app
const app = express()

// 挂载路由
app.get('/', (req, res) => {
  res.send('Hello, World')
})

app.post('/', (req, res) => {
  res.send('Hello, Tom')
})

app.listen(3000, () => {
  console.log('running……')
})

5、模块化路由

案例代码:

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

// 3. 挂载获取用户列表的路由
router.get('/user/list', (req, res) => {
  res.send('用户列表')
})

// 4. 挂载添加用户列表的路由
router.post('/user/add', (req, res) => {
  res.send('添加用户')
})

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

6、注册路由模块

案例代码:

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

// 导入路由模块
const userRouter = require('./002-router')

// 使用 app.use() 注册路由模块
app.use(userRouter)

app.listen(3000, () => {
  console.log('running……')
})

7、为路由模块添加前缀

案例代码:

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

// 导入路由模块
const userRouter = require('./002-router')

// 使用 app.use() 注册路由模块
// 给路由模块添加统一得到访问前缀 /api
app.use('/api', userRouter)

app.listen(3000, () => {
  console.log('running……')
})

二、中间件

1、中间件的概念

2、Express中间件的调用流程

 3、Express中间件的格式

4、next函数的作用

 二、express中间件

1、定义中间件函数

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

// 定义一个最简单的中间件函数
const mw = function(req, res, next){
  console.log('这是最简单的中间件函数')

  // 把流转关系,转交给下一个中间件或者路由
  next()
}

app.listen(80, () => {
  console.log('running……')
})

2、全局生效的中间件

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

// 定义一个最简单的中间件函数
const kw = (req, res, next) => {
  console.log('这是最简单的中间件函数')

  // 把流转关系,转交给下一个中间件或者路由
  next()
}

// 全局生效的中间件(处理所有的请求)
app.use(kw)

app.get('/', (req, res) => {
  console.log('调用了 / 这个路由')
  
  res.send('Home page')
})

app.get('/user', (req, res) => {
  console.log('调用了 /user 这个路由')
  res.send('User page')
})

app.listen(3000, () => {
  console.log('running……')
})

3、定义全局中间件的简化形式

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

// 定义全局中间件的简化形式
app.use((req, res, next) => {
  console.log('定义全局中间件的简化形式')

  next()
})

app.get('/', (req, res) => {
  console.log('调用了 / 这个路由')
  
  res.send('Home page')
})

app.get('/user', (req, res) => {
  console.log('调用了 /user 这个路由')
  res.send('User page')
})

app.listen(3000, () => {
  console.log('running……')
})

4、中间件的作用

 5、定义多个全局中间件

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

// 第一个全局中间件
app.use((req, res, next) => {
  console.log('调用了第一个全局的中间件')
  next()
})

// 第二个全局中间件
app.use((req, res, next) => {
  console.log('调用了第二个全局的中间件')
  next()
})

// 定义路由
// 请求这两个路由,会依次触发上述两个全局中间件
app.get('/user', (req, res) => {
  res.send('User Page')
})

app.listen(3000, () => {
  console.log('running……')
})

6、局部生效的中间件

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

// 定义中间件函数 mv1
const mv1 = (req, res, next) => {
  console.log('这是中间件函数')

  next()
}

// mv1 这个中间件只在 "当前路由中生效",这种用法属于 "局部生效的中间件"
app.get('/', mv1, (req, res) => {
  res.send('Home Page')
})

app.get('/user', (req, res) => {
  res.send('User Page')
})

app.listen(3000, () => {
  console.log('running……')
})

7、中间件的五个使用注意事项

三、中间件的分类

1、中间件的分类

1.1、应用级别的中间件

 1.2、路由级别的中间件

 1.3、错误级别的中间件

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

// 1. 路由
app.get('/', (req, res) => {
  // 1.1 抛出一个自定义的错误
  throw new Error('服务器内部发生了错误')

  res.send('Home Page.')
})

// 2. 错误级别的中间件
// 注意:错误级别的中间件,必须注册在所有路由之后
app.use((err, req, res, next) => {
  // 2.1 在服务器打印错误消息
  console.log('发生了错误:' + err.message)

  // 2.2 向客户端响应错误相关的内容 
  res.send(err.message)
})

app.listen(3000, () => {
  console.log('running……')
})

1.4、Express内置的中间件

 1.5、express.json中间件的使用

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

// 注意:除了错误级别的中间件,其他的中间件,必须在路由之前进行配置
// 通过 express.json() 这个中间件,解析表单中的 JSON 格式的数据
app.use(express.json())

app.post('/user', (req, res) => {
  // 在服务器,可以使用 req.body 这个属性,来接收客户端发送过来的请求体数据
  // 默认情况下,如果不配置解析表单数据中间件,则 req.body 默认等于 undefined
  console.log(req.body)
  res.send('ok')
})

app.listen(3000, () => {
  console.log('running……')
})

1.6、express.urlencoded中间件的使用

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

// 通过 express.urlencoded() 这个中间件,来解析表单中的 url-encoded 格式的数据
app.use(express.urlencoded({ extended: false }))

app.post('/book', (req, res) => {
  console.log(req.body)
  res.send(req.body)
})

app.listen(3000, () => {
  console.log('running……')
})

1.7第三方的中间件

举报

相关推荐

0 条评论