通过swagger在线地址生成前端接口调用

下载模块
npm install fs
npm install path-browserify
npm install http
新建autoGen.js文件

const fs = require('fs');
const path = require('path-browserify');
let apiData = {} // 访问swagger.json的数据
const http = require('http');const apiUrl = 'http://localhost:8001/swagger/v1/swagger.json' // swagger.json的地址,这里是本地的,可以替换成你的地址,有个问题是目前只能是http,https的不行,https会报一个证书错误// 生成api文件的目录
function mkdirsSync(dirname) {if (fs.existsSync(dirname)) {return true} else {if (mkdirsSync(path.dirname(dirname))) {fs.mkdirSync(dirname)return true}}
}function getPath(pathUrl) {return path.resolve(__dirname, pathUrl)
}let dataList = [] // 真正要处理的数据// 将swagger.json中的数据转换成我们需要的数据
function getDataList() {// 遍历apiData.pathsfor (const key in apiData.paths) {let routeData = {}routeData.api = keyconsole.log('path================ ' + key)// 遍历apiData.paths[key]for (let key2 in apiData.paths[key]) {routeData.method = key2console.log('methods============== ' + key2)let tag = apiData.paths[key][key2].tags[0]console.log('tag=====' + tag)routeData.controller = taglet params = apiData.paths[key][key2].parametersif (params) {routeData.bodyType = 'query'routeData.params = apiData.paths[key][key2].parameters} else {routeData.params = []if (key2 === 'post' && key2 !== 'get') {routeData.bodyType = 'body'let requestBody = apiData.paths[key][key2].requestBodyif (requestBody) {let content = requestBody.contentif (content) {let applicationJson = content['application/json']if (applicationJson) {let schema = applicationJson.schemaif (schema) {let properties = schema.$refif (properties) {let ref = properties.split('/')let refName = ref[ref.length - 1]let refData = apiData.components.schemas[refName]if (refData) {let refProperties = refData.propertiesif (refProperties) {for (let key3 in refProperties) {let param = {}param.name = key3param.in = 'body'param.required = trueparam.schema = refProperties[key3]routeData.params.push(param)}}}}}}}}}}//遍历apiData.paths[key][key2]for (let key3 in apiData.paths[key][key2]) {// console.log('tags===========' + key3)if (key2 === 'get') {//routeData.params = apiData.paths[key][key2][key3].parameters}//routeData.other = apiData.paths[key][key2][key3]console.log(apiData.paths[key][key2][key3])}console.log('xxxxxxxxxxxxxxxxxxxxxxxxxxxxx')}dataList.push(routeData)}console.log(dataList)
}// 获取远程swagger.json的数据
function httpGetJson(url) {return new Promise((resolve, reject) => {http.get(url, (res) => {const { statusCode } = resconst contentType = res.headers['content-type']let errorif (statusCode !== 200) {error = new Error('请求失败。\n' + `状态码: ${statusCode}`)} else if (!/^application\/json/.test(contentType)) {error = new Error('无效的 content-type.\n' + `期望 application/json 但获取的是 ${contentType}`)}if (error) {console.log('error')// 消耗响应数据以释放内存console.error(error.message)res.resume()return}res.setEncoding('utf8')let rawData = ''res.on('data', (chunk) => {rawData += chunk})res.on('end', () => {try {const parsedData = JSON.parse(rawData)resolve(parsedData)} catch (e) {reject(`错误: ${e.message}`)}})}).on('error', (e) => {reject(`错误: ${e.message}`)})})
}// 生成http请求js文件
async function createHttpJsFile() {console.log('start')apiData = await httpGetJson(apiUrl)getDataList()console.log(dataList)debuggerif (dataList.length === 0) {console.log('请先点击getUsers按钮')return}let httpJs = "import { get, post, deletedata, put, getblob} from './http'\n"httpJs += "const baseURL = $gloableConfig.baseURL;\n";httpJs += "const Token = '';\n";httpJs += "export default\n";httpJs += "{\n";httpJs += "baseURL,//服务器地址\n";httpJs += "Token,\n";httpJs += "}\n";if (dataList.length > 0) {const dirPath = '/src/api'// dataList根据controller去重const controllerList = []for (let i = 0; i < dataList.length; i++) {const routeData = dataList[i]const controller = routeData.controllerif (controllerList.indexOf(controller) === -1) {controllerList.push(controller)}}// 生成http请求js文件for (let i = 0; i < controllerList.length; i++) {// 查找dataList里与 controllerList[i]相同的数据 (同一个controller的api放在一起)const controllerDataList = dataList.filter(item => item.controller === controllerList[i])console.log(controllerDataList)for (const data of controllerDataList) {const api = data.api // /api/user/getUserList// 取出api中最后一个斜杠后面的内容const apiName = api.substring(api.lastIndexOf('/') + 1)if (data.method === 'get') {httpJs += `export const ${apiName} = (data) =>  get(baseURL +'${data.api}', data, Token);//${data.controller}`httpJs += `\n`} else if (data.method === 'post') {httpJs += `export const ${apiName} = (data) =>  post(baseURL +'${data.api}', data, Token);//${data.controller}`httpJs += `\n`}}}// 生成js文件mkdirsSync(getPath(`..${dirPath}/`))fs.writeFileSync(getPath(`..${dirPath}/api.js`), httpJs)httpJs = ''}
}
createHttpJsFile();

package.json文件新增配置
node后面是autoGen.js文件目录

"scripts": {"swagger": "node src/genSwagger/autoGen.js"},

完成之后执行指令

npm run swagger

模板需要根据自己的使用需要修改

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/6871.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[安洵杯 2019]JustBase(替换表)

题目&#xff1a; 我们看到题目是一些杂乱的字母和符号&#xff0c;但从题目和末尾的两个号&#xff0c;我们猜测是base64加密&#xff0c;但题目未出现1-9数字&#xff0c;而base64不包含!#$%等字符&#xff0c;所以我们考虑将字符!#$%按照键盘替换成数字1-9. 替换代码如下&a…

基于光伏电站真实数据集的深度学习预测模型(Python代码,深度学习五个模型)

效果视频链接&#xff1a;基于深度学习光伏预测系统&#xff08;五个模型&#xff09;_哔哩哔哩_bilibili 界面设计 注册界面 登录界面 主界面 展示界面 1.数据集来源 The SOLETE dataset 这里分别保存了不同间隔采样时间表格 1min是以1min 间隔采集的数据集 数据集截图&…

Java 中的 pyftpdlib 替代品

在 Java 中&#xff0c;有一些替代方案可以用来实现 FTP 服务器功能&#xff0c;类似于 Python 中的 pyftpdlib。目前我们常用的就是三种替换方案&#xff0c;这里需要根据自己的项目需求选择合适的方法。 1、问题背景 在 Java 环境下寻找一款与 pyftpdlib 类似的 FTP 服务器库…

企业开发基础--数据库

今天完成了数据库学习的全部内容&#xff0c;在事务&#xff0c;索引&#xff0c;范式中要有个人逻辑上的理解&#xff0c;也算是卡着点完成了大多数预期&#xff0c;还有一个Java游戏未完成&#xff0c;会后续补上。 之后的一周要完成34道数据库练习题以及JDBC&#xff0c;学…

ip地址快速切换软件是什么

ip地址快速切换软件是什么&#xff1f;随着互联网的发展&#xff0c;IP地址变得愈发关键。对于网络工作者、营销人员和游戏玩家&#xff0c;频繁更换IP地址成了日常工作需求。为满足这一需求&#xff0c;IP地址快速切换软件如虎观代理IP软件应运而生&#xff0c;它为用户提供了…

避雷!7.7分,新增1区TOP被标记On Hold,5本已被踢除!

本周投稿推荐 SSCI • 2/4区经管类&#xff0c;2.5-3.0&#xff08;录用率99%&#xff09; SCIE&#xff08;CCF推荐&#xff09; • 计算机类&#xff0c;2.0-3.0&#xff08;最快18天录用&#xff09; SCIE&#xff08;CCF-C类&#xff09; • IEEE旗下&#xff0c;1/2…

低代码技术的深度应用:物资管理的创新与效率提升

引言 在当今企业运营中&#xff0c;物资管理扮演着至关重要的角色。无论是制造业、零售业还是服务行业&#xff0c;有效的物资管理都是确保业务正常运转和持续发展的关键。然而&#xff0c;随着企业规模的扩大和业务的复杂化&#xff0c;物资管理也变得越来越复杂。企业需要管…

闭包(常见)

在JavaScript中&#xff0c;闭包&#xff08;Closure&#xff09;是一个非常重要的概念&#xff0c;它指的是那些能够访问自由变量的函数。自由变量是指在函数中使用的&#xff0c;但既不是函数参数也不是函数的局部变量的变量。 闭包的构成条件 函数作为返回值&#xff1a;一…

西藏自治区建设工程系列职称评价标准

西藏自治区建设工程系列职称评价标准评审要求关于印发《西藏自治区建设工程系列职称评价标准&#xff08;试行&#xff09;》&#xff08;修订稿&#xff09;的通知评审通知关于开展2023年度西藏自治区建设工程系列高级工程师职称评审申报工作的通知类别基本条件业绩成果备注工…

Day05-JavaWeb开发-请求响应(postman工具/参数/案例)分层解耦(三层架构/IOC-DI引入)

1. 请求响应 1.1 概述 1.2 请求-postman工具 1.3 请求-简单参数&实体参数 1.3.1 简单参数 1.3.2 实体参数 1.4 请求-数组集合参数 1.5 请求-日期参数&json参数 1.6 请求-路径参数 1.7 响应-ResponseBody 1.8 响应-案例 2. 分层解耦 2.1 三层架构 2.2 分层解耦(IOC-D…

流畅的python-学习笔记_序列

概念 抽象基类&#xff1a;ABC, Abstract Base Class&#xff0c;ABC还有一个概念&#xff0c;是一个编程语言 序列 内置序列类型 分类 可分为容器类型和扁平类型 容器类型有list&#xff0c; tuple&#xff0c; collections.deque等&#xff0c;存储元素类型可不同&…

实验九 Java 语言网络通信程序设计练习(课内实验)

一、实验目的 本次实验的主要目的是练习网络通信程序的设计方法&#xff0c;并掌握计算机网络基 础知识、Java语言网络通信程序类库的结构和使用方法。 二、实验要求 1. 认真阅读实验内容&#xff0c;完成实验内容所设的题目。 2. 能够应用多种编辑环境编写Java语言源程序…

南京观海微电子---电源,从微观角度观看电功率是怎么产生

从微观角度看看无功功率是怎么产生的&#xff0c;在此之前&#xff0c;我们得先知道引起无功功率的元器件是储能器件&#xff0c;主要是电感和电容。 首先&#xff0c;在宏观上&#xff0c;我们知道电感能导致电压超前电流90&#xff0c;可从如下公式推出&#xff1a; 由此可以…

强到离谱!AI绘画Stable Diffusion让商业换装如此简单!AI一键换装,AI绘画教程

今天给大家介绍一款可以让 Stable Diffusion 轻松实现AI一键换装的超强插件—— Inpaint Anything &#xff0c;它能精准地替换图片中的指定部位&#xff0c;不仅上手简单&#xff0c;而且简直强到离谱&#xff01; 首先&#xff0c;我们要下载这个插件。插件可看文末扫描获取…

【ARM Cortex-M3指南】7:嵌套向量中断控制器和中断控制

文章目录 七、嵌套向量中断控制器和中断控制7.1 嵌套向量中断控制器概述7.2 基本的中断配置7.2.1 中断使能和清除使能7.2.2 中断设置挂起和清除挂起7.2.3 优先级7.2.4 活跃状态7.2.5 PRIMASK和FAULTMASK特殊寄存器7.2.6 BASEPRI特殊寄存器7.2.7 其他异常的配置寄存器 7.3 设置中…

LSTM计算指示图

掌握网络结构组件构成 输入门、遗忘门、输出门候选记忆细胞记忆细胞隐藏状态ref&#xff1a;6.8. 长短期记忆&#xff08;LSTM&#xff09; — 《动手学深度学习》 文档 (gluon.ai)

【论文阅读笔记】Order Matters(AAAI 20)

个人博客地址 注&#xff1a;部分内容参考自GPT生成的内容 论文笔记&#xff1a;Order Matters&#xff08;AAAI 20&#xff09; 用于二进制代码相似性检测的语义感知神经网络 论文:《Order Matters: Semantic-Aware Neural Networks for Binary Code Similarity Detection》…

一分钱不花从HTTP升级到HTTPS

HTTP升级到HTTPS是一个涉及安全性和技术实施的过程&#xff0c;主要目的是为了提升网站数据传输的安全性&#xff0c;防止数据被窃取或篡改。以下是一些关于从HTTP升级到HTTPS的技术性要点和步骤概述&#xff0c;结合上述信息资源&#xff1a; 一、理解HTTPS的重要性 HTTPS (…

nodejs postgresql

pgsql.js const { Client } require(pg); const config {host: "127.0.0.1",database: "postgres",user: "postgres",password: "postgres",port: 5432, // 默认的PostgreSQL端口号 }const pg require("pg"); const poo…

IDEA--debug

1. 单点调试的三个级别 Step into&#xff1a;在单步执行时&#xff0c;遇到子函数就进入并且继续单步执行。Step over&#xff1a;在单步执行时&#xff0c;在函数内遇到子函数时不会进入子函数内单步执行&#xff0c;而是将子函数整个执行完再停止&#xff0c;也就是把子函数…