基于node.js的利用Epress第三方模块的AIP接口开发示例
1. 案例需求
基于 MySQL 数据库 + Express 对外提供用户列表的 API 接口服务。
用到的技术点如下:
- 第三方包 express 和 mysql2
- ES6 模块化
- Promise异步编程
- async、await 修饰
2. 主要实现步骤分析
① 搭建项目的基本结构
② 创建基本的服务器
③ 创建 db 数据库操作模块
④ 创建 user_ctrl 业务模块
⑤ 创建 user_router 路由模块
3. 实现
3.1 搭建项目的基本结构
① 初始化项目
- 项目空白目录下运行
npm init -y
② 启用 ES6 模块化支持
- 在 package.json 中声明 "type": "module"
③ 安装第三方依赖包
- 运行
npm install express@4.17.1 mysql2@2.2.5
3.2 创建基本服务器
① 根目录下建立 app.js 文件,代码如下:
查看代码
// 使用 ES6 的默认导入语法,导入 express 第三方模块
import express from 'express'
// 调用 express() 方法,用 app 接收
const app = express()
// 启动服务,监听8080端口,成功后执行回调函数,打印
app.listen(8080, () => {
console.log('server running at http://127.0.0.1');
})
② 执行 app.js 启动服务
运行 nodemon app.js
3.3 创建 db 数据库操作模块
① 根目录下创建 bd 文件夹
② bd 文件夹内创建 index.js 文件,代码如下:
查看代码
// 1. 默认导入 mysql2 模块
import mysql from 'mysql2'
// 2. 创建 mysql数据库 的连接对象,用常量 pool 接收
const pool = mysql.createPool({
host: '127.0.0.1',
port: 3306,
database: 'my_db', //创建的数据库名称
user: 'root',
password: 'admin' //数据库的密码
})
// 向外默认导出一个支持 Promose API 的 pool
export default pool.promise()
3.4 创建 user_ctrl 模块
① 根目录下创建 controller 文件夹
② controller 文件夹内创建 user_ctrl.js 文件,代码如下:
查看代码
// 1. 导入 db 数据库操作模块
import db from '../db/index.js'
// 2. 获取所有用户的列表数据,并按需导出去
export async function getAllUser(req,res) {
// db.query() 函数返回的是 promise 的实例对象
// 因此可以用 async/await 进行简化,还可以用 [] 解构
const [rows] = await db.query('select id,username,nickname from ev')
res.send({
status: 0,
message: '获取用户列表数据成功!',
data: rows,
})
}
3.5 创建 user_router 模块
① 根目录创建 router 文件夹
② router 文件夹内创建 user_router.js 文件,代码如下:
查看代码
// 1. 导入第三方 express 模块
import express from 'express'
// 3. 从 user_ctrl.js 模块中按需导入 getAllUser 函数
import { getAllUser } from '../controller/user_ctrl.js'
// 2. 创建路由对象
const router = new express.Router()
// 4. 挂载路由规则
router.get('/user',getAllUser)
// 5. 向外m默认导出
export default router
3.6 app.js 导入并挂载 user_router 路由模块
挂载后 app.js 代码如下:
查看代码
// 使用 ES6 的默认导入语法,导入 express 第三方模块
import express from 'express'
// 1. 使用默认导入语法,导入路由对象
import userRouter from './router/user_router.js'
// 调用 express() 方法,用 app 接收
const app = express()
// 2. 挂载用户路由模块
app.use('/api',userRouter)
// 启动服务,监听8080端口,成功后执行回调函数,打印
app.listen(8080, () => {
console.log('server running at http://127.0.0.1');
})
3.7 user_ctrl.js使用try...catch捕获异常
user_ctrl.js 修改后代码如下:
查看代码
import db from '../db/index.js'
// 使用 ES6 的按需导出语法,将 getAllUser 方法导出出去
export async function getAllUser(req, res) {
try {
const [rows] = await db.query('select id, username, nickname, xxx from ev_users')
res.send({
status: 0,
message: '获取用户列表数据成功!',
data: rows,
})
} catch (err) {
res.send({
status: 1,
message: '获取用户列表数据失败!',
desc: err.message,
})
}
}
3.8 使用postman工具发起请求
http://localhost:8080/api/user
略!!!
本文来自博客园,作者:RHCHIK,转载请注明原文链接:https://www.cnblogs.com/suihung/p/16154134.html