• ES6模块化、Express、node.js 实现的API 接口案例


    API 接口案例

    1. 案例需求

    基于 MySQL 数据库 + Express 对外提供用户列表的 API 接口服务。用到的技术点如下:

    2. 主要的实现步骤

    ① 搭建项目的基本结构

    ② 创建基本的服务器

    ③ 创建 db 数据库操作模块

    ④ 创建 user_ctrl 业务模块

    ⑤ 创建 user_router 路由模块

    3. 搭建项目的基本结构

    新建文件夹,然后初始化项目配置文件:

    npm init -y

    ① 启用 ES6 模块化支持

    • 在 package.json 中声明 "type": "module"

    ② 安装第三方依赖包

    • 运行

      npm install express@4.17.1 mysql2@2.2.5

    4. 创建基本的服务器

    根目录新建 app.js 作为项目的入口文件,代码如下:

    1. // 使用 ES6 的默认导入语法
    2. import express from 'express'
    3. const app = express()
    4. app.listen(80,()=>{
    5.  console.log('http:127.0.0.1')
    6. })

    然后 node ./app.js 来启动这个服务器,最简单的服务器就完成了。

    5. 创建 db 数据库操作模块

    1. import mysql from 'mysql2'
    2. const pool = mysql.createPool({
    3.  host: '127.0.0.1',
    4.  port: 3306,
    5.  database: 'my_db_01',
    6.  user: 'root',
    7.  password: 'admin123',
    8. })
    9. export default pool.promise()

    6. 创建 user_ctrl 模块

    1. import db from '../db/index.js'
    2. // 使用 ES6 的按需导出语法,将 getAllUser 方法导出出去
    3. export async function getAllUser(req, res) {
    4.  try {
    5.    const [rows] = await db.query('select id, username, nickname, xxx from ev_users')
    6.    res.send({
    7.      status: 0,
    8.      message: '获取用户列表数据成功!',
    9.      data: rows,
    10.   })
    11. } catch (err) {
    12.    res.send({
    13.      status: 1,
    14.      message: '获取用户列表数据失败!',
    15.      desc: err.message,
    16.   })
    17. }
    18. }
     
    

    7. 创建 user_router 模块

    1. import express from 'express'
    2. import { getAllUser } from '../controller/user_ctrl.js'
    3. const router = new express.Router()
    4. router.get('/user', getAllUser)
    5. export default router

    8. 导入并挂载路由模块

    1. import express from 'express'
    2. import userRouter from './router/user_router.js'
    3. const app = express()
    4. app.use('/api', userRouter)
    5. app.listen(80, () => {
    6.  console.log('server running at http://127.0.0.1')
    7. })

    9. 使用 try…catch 捕获异常

    1. import db from '../db/index.js'
    2. // 使用 ES6 的按需导出语法,将 getAllUser 方法导出出去
    3. export async function getAllUser(req, res) {
    4.  try {
    5.    const [rows] = await db.query('select id, username, nickname, xxx from ev_users')
    6.    res.send({
    7.      status: 0,
    8.      message: '获取用户列表数据成功!',
    9.      data: rows,
    10.   })
    11. } catch (err) {
    12.    res.send({
    13.      status: 1,
    14.      message: '获取用户列表数据失败!',
    15.      desc: err.message,
    16.   })
    17. }
    18. }

    如果不捕获异常,那么发生错误的时候,服务器会直接停止。用 try…catch 来捕获错误。

    总结

    ES6 模块化与异步编程总结如下:

    ① 能够知道如何使用 ES6 的模块化语法

    • 默认导出与默认导入、按需导出与按需导入

    ② 能够知道如何使用 Promise 解决回调地狱问题

    • promise.then()、promise.catch()

    ③ 能够使用 async/await 简化 Promise 的调用

    • 方法中用到了 await,则方法需要被 async 修饰

    ④ 能够说出什么是 EventLoop

    • EventLoop 示意图

    ⑤ 能够说出宏任务和微任务的执行顺序

    • 在执行下一个宏任务之前,先检查是否有待执行的微任务

    具体有忘记的回顾前面几篇文章。

    星月前端博客https://xingyue.vercel.app/

    个人博客,记录前端学习笔记,欢迎收藏或者提意见。

  • 相关阅读:
    mybatis逆向工程的构建及其概念
    c primer plus(2)
    PHP 图书资料管理系统mysql数据库web结构apache计算机软件工程网页wamp
    SpringCloud-Eureka-介绍+非集群式搭建
    人工智能之地形导航系统
    [PAT练级笔记] 66 Basic Level 1066 图像过滤
    就地初始化与列表初始化
    JavaWeb项目运维部署
    Apache SeaTunnel 2.3.4 版本发布:功能升级,性能提升
    《最新出炉》系列初窥篇-Python+Playwright自动化测试-18-处理鼠标拖拽-上篇
  • 原文地址:https://blog.csdn.net/qq_61950936/article/details/126256007