基于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

略!!!

posted @   RHCHIK  阅读(196)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示