基于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 @ 2022-04-16 20:33  RHCHIK  阅读(186)  评论(0编辑  收藏  举报