vue3 axios 实现自动化api配置详解

作者:落笔忆梦 时间:2024-05-28 16:01:23 

概述

在实践中,我们发现上述的代码重复率非常高,新增和修改都费力,并且是没技术含量的体力活。 但又必须要这样做,不适合以公共函数的形式重用,为了解决这个重复的体力活,我们开发了代码生成器,用工具来代替体力活。

对于前后端的数据交互都可以归纳为是对实体的 新增、修改、删除、查询。

代码生成器的原理是也是按照对实体的增、删、改、查规范,利用 NodeJs 根据接口的配置文件(包含请求路径、请求选项)按指定模板创建统一符合开发规范的 js 文件到工程指定目录下。

示例

以下通过一个用户的实体配置,讲解由代码生成器生成的代码文件。

1、新建文件 /coder/schemas/system.js 以下配置实现用户的增、删、改、列表查询、详情查询、接口调用。

module.exports = {
   name: '系统管理模块',
   model: [
       {
           title: '菜单管理',
           name: 'menu',
           methods: ['add', 'remove', 'edit', 'list', 'info'],
           path: '/system/menu',
       },

TIP

新建实体配置文件必须要在/coder/schemas/目录下,可以建目录。

2、运行命令 npm run coder 生成代码,代码文件目录在 src/api/system.js, 目录结构如下:

vue3 axios 实现自动化api配置详解

约定

代码生成器生成的代码需要与后端接口有预先的约定

请求 URL 的约定

前后端分离开发最佳实践是采用 RESTful 的接口形式进行通信,在此我们对请求 URL 进行统一的规范约定。

请求类型前端预定的方法前缀请求方法类型api 地址的后缀映射
新增addpost/add
更新editput/edit
删除removedelete/remove
分页列表pageget/page
不分页列表listget/list
导出exportget/export
详情infoget/info
唯一校验uniqueget/unique

请求传参的约定

GET 请求需要中文转码,导出 export 请求responseType = 'blob'

if (config.method === 'get') config.paramsSerializer = (params) => qs.stringify(params, { arrayFormat: 'comma' });

分页列表,请求参数约定

参数名说明
pageSize每页几条数据
pageNum页码,从 1 开始
needCountneedCount:1,需要总数,处理不需要总条数的情况(后台性能优化),默认为 1

分页列表 响应示例

code: 200,
data: {
   rows: [{
       id: "2"
   },{
       id: "4"
   },{
       id: "5"
   }],
   total: 3
},
msg: "请求成功"

响应码 code 的约定

200:执行成功
401:未登录(需要重新登录)
403:权限不足
404: 访问资源不存在
418: 联合登陆失败
500:系统内部错误(非业务代码里显式抛出的异常,例如由于数据不正确导致空指针异常、数据库异常等等)

请求跨域问题解决方案

前后端分离开发模式,由于前后端可以进行单独部署,请求跨域问题很常见,解决方法主要有两种方式:

1.采用 nginx 代理 2.接口响应头开启 Cross (推荐)

响应头需要做以下配置, 同时后端需要开放 OPTIONS 类型的请求,跨域带 cookie 的请求时,浏览器先试探性发送 OPTIONS 请求,成功后才发起真正的请求

Access-Control-Allow-Credentials:true
Access-Control-Allow-Origin:请求的host

如:

Access-Control-Allow-Credentials:true
Access-Control-Allow-Origin:http://www.fbknav.cn:98

如果接口不需跨域带 cookie 验证信息,可以简单设置

Access-Control-Allow-Origin: *

全局配置

当后端提供的接口与约定的规范不一致的时候,可以通过配置进行相应的调整做适配,但建议还是按前端建议的约定规范。

配置说明coder/config.js

module.exports = {
 // 架构配置文件目录
 schemasDir: "./schemas/",
 // 模板文件目录
 templatesDir: "./templates/",
 // api请求地址前缀
 pathPrefix: "API_HOST",
 // api支持的请求方法
 methods: [
   "add", // 新增数据
   "edit", // 更新数据
   "remove", // 删除数据
   "page", // 列表数据,响应数据含有分页信息,如:总数、当前页码、页大小
   "list", // 不分页列表数据
   "export", // 根据条件导出
   "info", // 详情查询
   "unique", // 唯一校验
 ],
 // 数据请求类型对应http请求方法的映射
 methodTypeMap: {
   add: "post",
   edit: "put",
   remove: "delete",
   page: "get",
   list: "get",
   export: "get",
   info: "get",
   unique: "get",
 },
 // 数据请求类型对应api地址的后缀映射
 methodSuffixMap: {
   add: "/add",
   edit: "/edit",
   remove: "/remove",
   page: "/page",
   list: "/list",
   export: "/export",
   info: "/info",
   unique: "/unique",
 },
 // 请求方法对应的中文注释
 methodCommentMap: {
   add: "新增<%=cname%>",
   edit: "更新<%=cname%>",
   remove: "删除<%=cname%>",
   page: "获取<%=cname%>分页列表",
   list: "获取<%=cname%>不分页列表",
   export: "根据条件导出<%=cname%>",
   info: "获取<%=cname%>单条信息详情",
   unique: "<%=cname%>字段去重校验",
 },
 // 是否开启生成批量删除
 batchEnabled: true,
 // 生成api文件路径
 outApiPath: "../src/api/",
};

模型配置

一个标准的模型配置文件如下,建议相同的实体操作都在一个文件里配置。

module.exports = {
 name: "系统管理模块", // 模块名称,用来生成注释文档
 model: {
   path: "/api/users", // 接口地址路径,必须
   title: "", // 接口说明,用来生成注释文档
   name: "", // 方法名,methods + name使用驼峰法生成完整的方法名,可选
   prefix: "", // 接口地址前缀,可选,默认为`coder/config.js`中的pathPrefix, 名称必须要在 src/config/index.js中定义,否则报错
   methods: [
     "add", // 新增数据
     "edit", // 更新数据
     "remove", // 删除数据
     "page", // 列表数据,响应数据含有分页信息,如:总数、当前页码、页大小
     "list", // 不分页列表数据
     "export", // 根据条件导出
     "info", // 详情查询
     "unique", // 唯一校验
   ], // 生成请求方法,没有该参数时默认全部,如需要自定义,书写名称即可
   options: {}, // axios 参数选项,可选
   disabled: false, // 是否禁用该配置项, 设置为true,代码生成器将忽略该配置
 },
};

1、实现对一个实体进行增、删、改、查、导出、唯一性校验

module.exports = {
 name: "系统管理模块",
 model: {
   path: "/api/user",
 },
};

2、只需要增、删、改、查中得某些操作,可以指定生成你需要的方法

module.exports = {
   name: "系统管理模块",
   model: {
       path: '/api/user',
       // 需要生成的方法,可以按需要设置
       methods: ['add', 'edit', 'remove', 'list', 'info'],
   }
}

3、自定义方法配置

module.exports = {
 name: "系统管理模块",
 model: {
   title: "登录接口",
   name: "login",
   methods: "auth",
   path: "/auth/login",
   options: {
     method: "post",
   },
 },
};

4、指定请求接口地址前缀

module.exports = {
 name: "系统管理模块",
 model: {
   title: "登录接口",
   name: "login",
   methods: "auth",
   prefix: "OTHER_PATH", // 设置与全局配置不同的前缀,OTHER_PATH 在 src/config/index.js中定义
   path: "/auth/login",
   options: {
     method: "post",
   },
 },
};

来源:https://juejin.cn/post/7142802556853420045

标签:vue3,axios,自动化,api,配置
0
投稿

猜你喜欢

  • Tensorflow 1.0之后模型文件、权重数值的读取方式

    2022-01-09 21:33:18
  • 大幅提升MySQL中InnoDB的全表扫描速度的方法

    2024-01-19 20:58:42
  • SQL Server:触发器实例详解

    2024-01-26 03:25:47
  • JavaScript版无组件上传类

    2007-10-06 23:16:00
  • python/Matplotlib绘制复变函数图像教程

    2023-08-03 07:36:43
  • 基于Python实现围棋游戏的示例代码

    2022-08-21 07:56:39
  • Python访问纯真IP数据库脚本分享

    2024-01-25 12:59:50
  • Navicat连接mysql报错2003(10060)的解决方法

    2024-01-25 06:08:14
  • vue.js中ref及$refs的使用方法解析

    2024-05-09 10:42:35
  • Git在Windows中安装与使用教程

    2023-11-01 08:47:55
  • 精通Javascript系列之数据类型 字符串

    2024-04-17 09:49:59
  • pyinstaller使用大全

    2022-12-17 21:37:28
  • Python基于最小二乘法实现曲线拟合示例

    2021-08-06 15:47:07
  • MySQL锁(表锁,行锁,共享锁,排它锁,间隙锁)使用详解

    2024-01-20 12:07:17
  • MySQL Innodb关键特性之插入缓冲(insert buffer)

    2024-01-22 20:58:16
  • 解剖JavaScript中的null和undefined

    2009-03-01 12:49:00
  • 详解python中的json和字典dict

    2023-05-16 02:25:26
  • mysql 5.7.13 安装配置方法图文教程(linux)

    2024-01-27 20:46:37
  • Vue 中文本内容超出规定行数后展开收起的处理的实现方法

    2024-05-29 22:48:07
  • Bootbox将后台JSON数据填充Form表单的实例代码

    2023-08-22 22:01:21
  • asp之家 网络编程 m.aspxhome.com