nodejs学习记录--express路由

express中间件

  • 1. Express 中间件
    • 1.1Express中间件的格式
    • 1.2 next函数的作用
  • 2. 中间件使用
    • 2.1 最简单的中间件
    • 2.2 全局生效的中间件
    • 2.3 定义全局生效的简化中间件
    • 2.4 定义多个全局中间件
    • 2.5 局部生效的中间件
    • 2.6 定义多个局部中间件
    • 2.7 中间件的分类
    • 2.8 使用Express写接口
      • 2.8.1 编写GET接口
      • 2.8.2 编写POST接口
      • 2.8.3 基于cors解决接口跨域问题
      • 2.8.4 CORS响应头部
      • 2.8.5 预检请求
  • 3.Express中使用MySQL
    • 3.1 安装与配置MySQL
      • 3.1.1 安装MySQL
      • 3.1.2 配置MySQL模块![在这里插入图片描述](https://img-blog.csdnimg.cn/de6aea3233dd4668bbed5ed483c1a4a2.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5Yir5Ye65aOw772e772e,size_20,color_FFFFFF,t_70,g_se,x_16)
      • 3.1.3 测试MySQL模块能否正常工作
    • 3.2 使用MySQL模块操作MySQL数据库
      • 3.2.1 查询数据
      • 3.2.2 插入数据
      • 3.2.3 快捷插入
      • 3.2.4 更新数据
      • 3.2.5 更新数据便捷方式
      • 3.2.6 删除数据
      • 3.2.7 标记删除

1. Express 中间件

中间件的调用流程:
nodejs学习记录--express路由_第1张图片

1.1Express中间件的格式

nodejs学习记录--express路由_第2张图片

1.2 next函数的作用

next函数时实现多个中间件连续调用的关键,她表示把流转关系转交给下一个中间件或路由。

2. 中间件使用

2.1 最简单的中间件

// 创建基本服务器
const express = require('express')
const app = express()

//定义一个最简单的中间件函数
const mw = function(req , res , next) {
  console.log('这是最简单的中间件函数')
  // 把流转关系转交给下一个中间件或路由
  next()
}

app.listen(80 )

2.2 全局生效的中间件

客户端发起的任何请求,到达服务器后都会触发中间件,叫做全局生效的中间件。
通过调用app.use(中间件函数),即可定义一个全局生效的中间件。

//全局生效的中间件
app.use(mw)

2.3 定义全局生效的简化中间件

直接在app.use()中写方法。

app.use(function(req , res , next) {
  console.log('这是最简单的中间件函数')
  // 把流转关系转交给下一个中间件或路由
  next()
})

多个中间件中共享req和res,可以简化很多代码的书写。

nodejs学习记录--express路由_第3张图片

2.4 定义多个全局中间件

nodejs学习记录--express路由_第4张图片

2.5 局部生效的中间件

不适用app.use()定义的中间件叫局部生效的中间件。
nodejs学习记录--express路由_第5张图片

2.6 定义多个局部中间件

nodejs学习记录--express路由_第6张图片

2.7 中间件的分类

  1. 应用级别的中间件
    nodejs学习记录--express路由_第7张图片
  2. 路由级别的中间件
    nodejs学习记录--express路由_第8张图片
  3. 错误级别的中间件
    nodejs学习记录--express路由_第9张图片
  4. Express内置的中间件
    nodejs学习记录--express路由_第10张图片
  5. 第三方的中间件
    在这里插入图片描述

2.8 使用Express写接口

2.8.1 编写GET接口

nodejs学习记录--express路由_第11张图片

2.8.2 编写POST接口

nodejs学习记录--express路由_第12张图片

2.8.3 基于cors解决接口跨域问题

解决跨域问题的方案有两种:
① CORS(主流的解决方案,推荐)
② JSONP(有缺陷的解决方案,只支持GET请求)
cors是Express的一个第三方中间件,通过安装配置cors中间件可以很方便解决跨域问题。
使用步骤:
① 运行 npm install cors 安装中间件
② 使用 const cors = require('cors') 导入中间件
③ 在路由之前调用 app.use(cors()) 配置中间件

CORS(Cross-Origin Resource Sharing,跨域资源共享)
由一系列HTTP响应头组成,这些HTTP响应头决定浏览器是否阻止前端JS代码跨域获取资源

nodejs学习记录--express路由_第13张图片

2.8.4 CORS响应头部

  1. CORS响应头部 -Access-Control-Allow-Origin
    nodejs学习记录--express路由_第14张图片
    nodejs学习记录--express路由_第15张图片
  2. CORS响应头部 -Access-Control-Allow-Headers
    nodejs学习记录--express路由_第16张图片
  3. CORS响应头部 -Access-Control-Allow-Methods
    nodejs学习记录--express路由_第17张图片

2.8.5 预检请求

预检请求发生时请求接口会发生两次请求,第一次时option预检请求,第二次才是正常请求。
nodejs学习记录--express路由_第18张图片

3.Express中使用MySQL

3.1 安装与配置MySQL

3.1.1 安装MySQL

MySQL模块是托管于npm上的第三方模块,安装命令:

npm install mysql

3.1.2 配置MySQL模块nodejs学习记录--express路由_第19张图片

3.1.3 测试MySQL模块能否正常工作

// 3.测试MySQL是否正常工作
db.query('select 1' , (err, result)=>{
  // mysql 模块出错
  if(err) return console.log(err.message)
  // 成功
  console.log(result)
})

模块正常工作:
在这里插入图片描述

3.2 使用MySQL模块操作MySQL数据库

3.2.1 查询数据

// 查询表
const sqlStr = 'select * from users'
db.query(sqlStr , (err, result)=>{
  // mysql 模块出错
  if(err) return console.log(err.message)
  // 成功
  console.log(result)
})

结果:
在这里插入图片描述

3.2.2 插入数据

// 插入对象
const user = { name: '王五' , password: 'dhsfbaj'}
const sqlStr = 'INSERT INTO users (name , password) values( ? , ?)'
db.query(sqlStr, [user.name , user.password] , (err, result)=>{
  // mysql 模块出错
  if(err) return console.log(err.message)
  // 成功
  if(result.affectedRows === 1){
    console.log(result)
  }
})

插入成功后的result:
nodejs学习记录--express路由_第20张图片
nodejs学习记录--express路由_第21张图片

3.2.3 快捷插入

nodejs学习记录--express路由_第22张图片

3.2.4 更新数据

// 更新数据
const user = { id: 1 ,  name: '更新的名字' , password: '000000'}
const sqlStr = 'UPDATE users SET name = ? , password = ? where id = ?'
db.query(sqlStr, [user.name , user.password , user.id] , (err, result)=>{
  // mysql 模块出错
  if(err) return console.log(err.message)
  // 成功
  if(result.affectedRows === 1){
    console.log(result)
  }
})

结果:
nodejs学习记录--express路由_第23张图片
nodejs学习记录--express路由_第24张图片

3.2.5 更新数据便捷方式

nodejs学习记录--express路由_第25张图片

3.2.6 删除数据

// 删除数据
const id = 2
const sqlStr = 'DELETE FROM users where id = ?'
db.query(sqlStr, id , (err, result)=>{
  // mysql 模块出错
  if(err) return console.log(err.message)
  // 成功
  if(result.affectedRows === 1){
    console.log(result)
  }
})

nodejs学习记录--express路由_第26张图片
在这里插入图片描述

3.2.7 标记删除

nodejs学习记录--express路由_第27张图片

你可能感兴趣的:(学习,中间件,node.js)