1.4.6 • Published 11 months ago
nswag-ts v1.4.6
nswag-ts
介绍
根据 swagger 文档生成 typescript 客户端调用代码
安装教程
- npm i nswag-ts -D
使用说明
- 在 package.json 的 scripts 节点增加 2 个执行命令
- "nswag-init":"nswag init", // 初始化配置
"nswag-run":"nswag run" // 执行代码生成
第一步执行:npm run nswag-init 初始化项目
- 初始化完成后会在项目根目录创建文件夹 nswag,里面放置了配置文件及代码模板
修改配置文件和代码模板就可以进行第二步生成操作了
config.js 为配置文件
- 配置所有需要生成的接口,及相应的生成规则,详见 【配置参数】
tpl 文件里面是代码模板(可以根据自己的实际情况调整模板)
- base.ejs 接口调用基类模板,默认使用了 axios
- method.ejs 接口函数生成模板
- model.ejs 接口对象生成模板
- mock.ejs 模拟数据代码生成模板-调用
- mock-method.ejs 模拟数据代码生成模板-接口实例
第二步执行:npm run nswag-run 执行代码生成调用接口
配置参数
{
Name: 'nswag-ts',
Description: '根据swagger文档生成typescript客户端调用代码',
Apis: [
{
SwaggerUrl: string // 接口文档地址(必填)
ApiBase: string // 接口根节点(必填)
ApiName: string // 接口名称(必填)
OutPath: string // 输出目录(默认:项目根目录:/src/api/)
TplPath: string // 模板路径(默认:初始化后会自动copy模板文件夹到项目根目录:nswag,如果进行了修改则需配置此目录)
Mock: boolean // 是否启用模拟数据 (默认:false)
FormatControllerName: Function // 格式化模块名称(默认:接口名称+Api)
FormatMethodName: Function // 格式化接口名称(默认:小驼峰命名)
FormatModelName: Function // 格式化dto对象、枚举名称(默认:只会去除特殊字符)
FormatMock: Function // 接管模拟数据格式化
}
],
// 采用prettier格式化代码,不启用则去除该节点配置,配置 参考 https://prettier.io/docs/en/options
prettier: {
parser: 'babel-ts',
singleQuote: true,
printWidth: 180,
tabWidth: 2,
semi: false,
trailingComma: 'none'
}
}
格式化函数示例
/**
* 格式化模块名称(默认:接口名称+Api)
* @param name 名称
*/
public formatControllerName(name: string) {
return name.indexOf('Api') !== -1 ? name : name + 'Api'
}
/**
* 格式化接口名称(默认:小驼峰命名)
* @param name 名称
*/
public formatMethodName(name: string) {
if (name === '/' || name === '') {
return ''
}
const fnName = name.substring(name.lastIndexOf('/'))
return _.camelCase(fnName)
}
/**
* 格式化dto对象、枚举名称(默认:只会去除特殊字符)
* @param name 名称
*/
public formatModelName(name: string) {
return name.substring(name.lastIndexOf('/') + 1).replace(/[.,\[\]]/g, '_')
}
/**
* 格式化模拟值
* @param val 默认格式化后的值
* @param p 对应的属性
* @param mock 最终模拟数据
*/
public formatMock(val: any, p: Propertie, mock: any) {
switch (p.type) {
case 'string':
switch (p.name) {
case 'name':
val = '@cname'
break
case 'title':
val = '@ctitle(10, 20)'
break
case 'mobile':
val = '@natural(10000)'
break
case 'email':
val = '@email'
break
case 'province':
val = '@province'
break
case 'city':
val = '@city'
break
case 'area':
val = '@county'
break
default:
val = '@ctitle(10, 20)'
break
}
mock[p.name] = val
break
case 'number':
switch (p.name) {
case 'result_code':
val = 0
break
case 'page_index':
val = 1
break
case 'page_size':
val = 15
break
case 'total_count':
val = 30
break
default:
val = '@integer(0, 100)'
break
}
mock[p.name] = val
break
case 'array':
mock[p.name + '|20'] = val
break
default:
mock[p.name] = val
break
}
return mock
}
代码格式化
// 采用prettier格式化代码,不启用则去除该节点配置,配置 参考 https://prettier.io/docs/en/options
prettier: {
parser: 'babel-ts',
singleQuote: true,
printWidth: 180,
tabWidth: 2,
semi: false,
trailingComma: 'none'
}
模板编辑
// 新版本nswag-ts,优化了模板文件的数据源结构,更大程度的采用了swagger原本的数据格式,但是swagger 数据格式不太好构件相关接口定义,所以nswag-ts提供了一系列用于数据转化的方法,可以在模板文件中直接调用,通过这些方法能够减轻模板代码的编写,也可以拥有更多的自定义用法。
函数列表:
1、格式化参数对象,获取指定类型的参数
this.getParameter(参数对象,['query','body'],callback)
2、获取指定控制器依赖的模块
this.getTagModels(tag)
3、格式化返回对象
this.getResponses(m.responses)
4、获取全部类型和枚举对象
this.getModelsAndEnums()
5、根据返回对象,生成Mock数据
this.mock(responses, data.Models)
6、获取全部控制器,swagger里面对应tag标签
this.getTags()
代码仓库
1.4.6
11 months ago
1.4.5
11 months ago
1.4.4
11 months ago
1.4.3
11 months ago
1.4.2
11 months ago
1.4.1
11 months ago
1.4.0
11 months ago
1.3.9
12 months ago
1.3.8
12 months ago
1.3.7
1 year ago
1.3.6
2 years ago
1.3.5
2 years ago
1.3.4
2 years ago
1.3.3
2 years ago
1.3.2
2 years ago
1.2.3
2 years ago
1.3.1
2 years ago
1.3.0
2 years ago
1.2.2
4 years ago
1.2.1
4 years ago
1.2.0
4 years ago
1.1.9
5 years ago
1.1.8
5 years ago
1.1.7
5 years ago
1.1.6
5 years ago
1.1.5
5 years ago
1.1.4
5 years ago
1.1.3
5 years ago
1.1.2
5 years ago
1.1.1
5 years ago
1.1.0
5 years ago
1.0.9
5 years ago
1.0.8
5 years ago
1.0.7
5 years ago
1.0.6
5 years ago
1.0.5
5 years ago
1.0.4
5 years ago
1.0.3
5 years ago
1.0.1
5 years ago
1.0.0
5 years ago