API 接口案例
- 1. 案例需求
- 2. 主要的实现步骤
- 3. 搭建项目的基本结构
- 4. 创建基本的服务器
- 5. 创建 db 数据库操作模块
- 6. 创建 user_ctrl 模块
- 7. 创建 user_router 模块
- 8. 导入并挂载路由模块
- 9. 使用 try…catch 捕获异常
1. 案例需求
基于 MySQL 数据库 + Express
对外提供用户列表
的 API 接口服务。用到的技术点如下:
⚫ 第三方包 express 和 mysql2
⚫ ES6 模块化
⚫ Promise
⚫ async/await
2. 主要的实现步骤
① 搭建项目的基本结构
② 创建基本的服务器
③ 创建 db
数据库操作模块
④ 创建 user_ctrl 业务模
块
⑤ 创建 user_router
路由模块
3. 搭建项目的基本结构
① 启用 ES6 模块化支持
⚫ 在 package.json 中声明 "type": "module"
② 安装第三方依赖包
⚫ 运行 npm install express
@4.17.1 mysql2
@2.2.5
npm init -y
"type": "module",
npm install express@4.17.1 mysql2@2.2.5
4. 创建基本的服务器
- 新建app.js
- 运行服务器
nodemon .\app.js
// 使用ES6语法默认导入
import express from "express";
const app = express()
app.listen(80, () => {
console.log('server running at http://127.0.0.1');
})
5. 创建 db 数据库操作模块
-
新建db文件夹
-
新建index.js文件
-
在文件中输入以下代码(导入mysql,创建和数据库连接,导出Promis API)
// 导入mysql
import mysql from 'mysql2'
const pool = mysql.createPool({
host: '127.0.0.1',
port: 3306,
database: 'my_db_01',//要操作的数据库名称
user: 'root', //登录数据库的用户名
password: 'admin123'//登录数据库密码
})
// 默认导出一个支持Promise API 的pool
export default pool.promise()
6. 创建 user_ctrl 模块
- 新建controller文件夹
- 新建user_ctrl.js文件
- 导入db,运用async、await
import db from '../db/index.js'
// 获取所有用户列表数据
export async function getAllUser(req, res) {
const sql = 'select id,username,nickname from ev_users'
const [rows] = await db.query(sql)
res.send({
status: 0,
message: '获取用户列表数据成功!',
date: rows,
})
}
7. 创建 user_router 模块
- 新建router文件夹
- 新建user_router.js文件
import express from 'express'
// 按需导入getAllUser方法
import { getAllUser } from '../controller/user_ctrl'
// 创建路由对象
const router = express.Router()
// 挂载路由
router.get('/user', getAllUser)
// 导出
export default router
8. 导入并挂载路由模块
- 在app.js中添加代码
// 使用ES6语法默认导入
import express from "express";
// 导入router
import userRouter from "./router/user_router.js";
const app = express()
// 挂载
app.use('/api', userRouter)
app.listen(80, () => {
console.log('server running at http://127.0.0.1');
})
9. 使用 try…catch 捕获异常
在user_ctrl.js中添加代码
import db from '../db/index.js'
// 获取所有用户列表数据
export async function getAllUser(req, res) {
try {
const sql = 'select id,username,nickname from ev_users'
const [rows] = await db.query(sql)
res.send({
status: 0,
message: '获取用户列表数据成功!',
date: rows,
})
} catch (error) {
res.send({
status: 1,
message: '获取用户列表数据失败!',
desc: error.message
})
}
}
http://127.0.0.1/api/user