当前位置: 首页 > article >正文

编写开发API接口

文章目录:

环境和结构 

一:初始化

1.创建项目

2. 配置cors跨域

3.配置解析表单数据的中间件

4.初始化用户路由模块

5.抽离用户路由模块中的处理函数

二:数据库连接项目

1.在数据库中新建表

2.安装并配置mysql模块

三:验证表单数据

四:逻辑代码


参考:api_server_ev;编写好代码的接口后,可以写对应的API接口文档

环境和结构 

软件:VScode、Postman、Node.js、MySQL

结构 

api_server 文件夹:项目根目录

   app.js文件:项目的入口

   router文件夹:路由模块,存放客户端的请求与处理函数之间的映射关系
        user.js文件:用户的路由模块

   router_handler文件夹:路由处理函数模块
        user.js文件:用户的路由处理函数模块

   db文件夹:数据库相关
        index.js 文件:创建数据库的连接对象

   schema:验证规则模块
        user.js 

一:初始化

1.创建项目

第一步:根目录下初始化包管理配置文件

npm init -y

第二步:安装特定版本的 express

npm i express@4.17.1

第三步:app.js初始化【app.js

// 导入 express 模块
const express = require('express')
// 创建 express 的服务器实例
const app = express()


// 调用 app.listen 方法,指定端口号并启动web服务器
app.listen(3007, function () {
  console.log('api server running at http://127.0.0.1:3007')
})

2. 配置cors跨域

第一步:安装 cors 中间件

npm i cors@2.8.5

第二步:app.js 中导入并配置 cors 中间件【app.js

// 导入 cors 中间件
const cors = require('cors')
// 将 cors 注册为全局中间件
app.use(cors())

3.配置解析表单数据的中间件

app.use(express.urlencoded({ extended: false }))

4.初始化用户路由模块

第一步:/router/user.js文件用户的路由模块始化【/router/user.js

const express = require('express')
// 创建路由对象
const router = express.Router()



//导入用户路由处理函数模块
const userHandler = require('../router_handler/user')
//导入文章分类的路由处理函数模块
const artcate_handler = require('../router_handler/artcate')

// 注册新用户
router.post('/reguser', userHandler.regUser)
// 登录
router.post('/login', userHandler.login)
// 获取用户的基本信息
router.get('/userinfo', (req, res) => {
  res.send('ok')
})
// 获取文章分类的列表数据
router.get('/cates', artcate_handler.getArticleCates)


// 导入验证数据合法性的中间件
const expressJoi = require('@escook/express-joi')
// 导入需要的验证规则对象
const { update_userinfo_schema, update_password_schema } = require('../schema/user')
// 更新用户的基本信息
router.post('/userinfo', expressJoi(update_userinfo_schema), userinfo_handler.updateUserInfo)
router.post('/updatepwd', expressJoi(update_password_schema), userinfo_handler.updatePassword)


// 将路由对象共享出去
module.exports = router

第二步:在 app.js 中导入并使用 用户路由模块【app.js】

// 导入并注册用户路由模块
const userRouter = require('./router/user')
app.use('/api', userRouter)



// 导入并使用用户信息路由模块
const userinfoRouter = require('./router/userinfo')
// 注意:以 /my 开头的接口,都是有权限的接口,需要进行 Token 身份认证
app.use('/my', userinfoRouter)

5.抽离用户路由模块中的处理函数

在 /router_handler/user.js 中,使用 exports 对象,分别向外共享如下两个 路由处理函数【/router_handler/user.js】

/**
 * 在这里定义和用户相关的路由处理函数,供 /router/user.js 模块进行调用
 */

// 注册用户的处理函数
exports.regUser = (req, res) => {
  res.send('reguser OK')
}

// 登录的处理函数
exports.login = (req, res) => {
  res.send('login OK')
}

二:数据库连接项目

1.在数据库中新建表

2.安装并配置mysql模块

第一步:安装 mysql模块

npm i mysql@2.18.1

第二步:index.js创建数据库的连接对象【index.js】

// 导入 mysql 模块
const mysql = require('mysql')

// 创建数据库连接对象
const db = mysql.createPool({
  host: '127.0.0.1',
  user: 'root',
  password: '密码',
  database: '数据库名',
})

// 向外共享 db 数据库连接对象
module.exports = db

第三步:从/router_handler/user.js数据库获取信息【/router_handler/user.js】

// 导入数据库操作模块
const db = require('../db/index')

//定义 SQL 语句
const sql = `select id, username, nickname, email, user_pic from ev_users where id=?`

//调用 db.query() 执行 SQL 语句
    // 注意:req 对象上的 user 属性,是 Token 解析成功,express-jwt 中间件帮我们挂载上去的
          db.query(sql, req.user.id, (err, results) => {
      // 1. 执行 SQL 语句失败
          if (err) return res.cc(err)

      // 2. 执行 SQL 语句成功,但是查询到的数据条数不等于 1
          if (results.length !== 1) return res.cc('获取用户信息失败!')

      // 3. 将用户信息响应给客户端
          res.send({
            status: 0,
            message: '获取用户基本信息成功!',
            data: results[0],
          })
        })

三:验证表单数据

在 /schema/user.js 验证规则模块中【 /schema/user.js

// 定义 id, nickname, emial 的验证规则
const id = joi.number().integer().min(1).required()
const nickname = joi.string().required()
const email = joi.string().email().required()



//并使用 exports 向外共享如下的 验证规则对象
// 验证规则对象 - 更新用户基本信息
exports.update_userinfo_schema = {
  body: {
    id,
    nickname,
    email,
  },
}

四:逻辑代码

相关代码

http://www.kler.cn/news/9488.html

相关文章:

  • Halcon: (示例 1)OCR 字符识别
  • 【Pycharm基础运用】涵盖pycharm的常用功能
  • 初识设计模式 - 备忘录模式
  • 面试官灵魂拷问:为什么 SQL 语句不要过多的 join?
  • MyBatis-Plus的基本操作
  • 【AI绘图学习笔记】Latent Diffusion Model(上)——论文解读
  • 大模型“云上经济”之权力游戏
  • sipp3.6带媒体测试方案
  • 【华为OD机试真题】简单的自动曝光(javapython)
  • stata数据处理
  • 【Vite】环境变量的配置与使用
  • 认证认可机构收费项目和标准
  • 深拷贝和浅拷贝
  • Python 中 SyntaxError: ‘yield‘ outside function 错误
  • 算法与数据结构 | 时间复杂度、排序、异或位运算
  • ROS入门教程(一)Python实现Hello world
  • 前端架构师-week3-大厂怎么做项目
  • vue dom 更新nextTick
  • restTemplate发送multipartFile和String混合参数及接收
  • 素数环PrimeRing [3*]
  • redis 基础数据结构
  • 基于多种算法实现鸢尾花聚类
  • Spark SQL实战(04)-API编程之DataFrame
  • 最新阿里、腾讯、华为、字节等大厂的薪资和职级对比,看看你差了多少...
  • 企业工程项目管理系统源码+java版本+项目模块功能清单+spring cloud +spring boot
  • 打开 plist 文件
  • 因薪资低拒绝offer,HR恼羞成怒,网友瞬间炸翻了..
  • Numpy基础用法
  • Android中的接口回调机制
  • 时光煮雨,岁月缝花