ABP 集成 nswag 到 VUE 项目, 自动生成操做类代码

记录日期: 2019-9-22 23:12:39javascript

原文连接:http://www.javashuo.com/article/p-cwlpwhpz-ek.htmlhtml

 

集成记录:java

 

npm install nswag --save-devios

 

复制  NSwag\src\NSwag.CodeGeneration.TypeScript\Templates 目录下的全部文件到 ts 项目的 nswag 目录下,nswag 源码下载困难,人肉拷贝吧 https://github.com/RicoSuter/NSwag/tree/master/src/NSwag.CodeGeneration.TypeScript/Templatesgit

修改 service.config.nswag 中的 templateDirectory 为: "templateDirectory": "./Templates",github

至此,能够随意调整复制过来的 liquid 模板,好比增长clientBaseClass 的引用  个人 完整配置以下:npm

{
  "runtime": "Default",
  "defaultVariables": null,
  "documentGenerator": {
    "fromDocument": {
      "json": "",
      "url": "http://localhost:21021/swagger/v1/swagger.json",
      "output": null
    }
  },
  "codeGenerators": {
    "openApiToTypeScriptClient": {
      "className": "{controller}ServiceProxy",
      "moduleName": "",
      "namespace": "",
      "typeScriptVersion": 2.7,
      "template": "Axios",
      "promiseType": "Promise",
      "httpClass": "HttpClient",
      "useSingletonProvider": false,
      "injectionTokenType": "InjectionToken",
      "rxJsVersion": 6.0,
      "dateTimeType": "Date",
      "nullValue": "Null",
      "generateClientClasses": true,
      "generateClientInterfaces": false,
      "generateOptionalParameters": false,
      "exportTypes": true,
      "wrapDtoExceptions": false,
      "exceptionClass": "ApiException",
      "clientBaseClass": "AbpServiceBase",
      "wrapResponses": false,
      "wrapResponseMethods": [],
      "generateResponseClasses": true,
      "responseClass": "SwaggerResponse",
      "protectedMethods": [],
      "configurationClass": null,
      "useTransformOptionsMethod": false,
      "useTransformResultMethod": true,
      "generateDtoTypes": true,
      "operationGenerationMode": "MultipleClientsFromPathSegments",
      "markOptionalProperties": false,
      "generateCloneMethod": false,
      "typeStyle": "Class",
      "classTypes": [],
      "extendedClasses": [],
      "extensionCode": "",
      "generateDefaultValues": true,
      "excludedTypeNames": [],
      "excludedParameterNames": [],
      "handleReferences": true,
      "generateConstructorInterface": false,
      "convertConstructorInterfaceData": true,
      "importRequiredTypes": true,
      "useGetBaseUrlMethod": false,
      "baseUrlTokenName": "API_BASE_URL",
      "queryNullValue": "",
      "inlineNamedDictionaries": false,
      "inlineNamedAny": false,
      "templateDirectory": "./Templates",
      "typeNameGeneratorType": null,
      "propertyNameGeneratorType": null,
      "enumNameGeneratorType": null,
      "serviceHost": null,
      "serviceSchemes": null,
      "output": "../src/api/abp-service-proxies.ts"
    }
  }
}

 

ABP 的swagger 必须使用这种方式获取data.resultjson

修改 Client.ProcessResponse.ReadBodyStart.liquid axios

{% elseif Framework.IsAxios -%}
const _responseText = response.data.result;    
 
或者你不去修改模板,使用 个人配置,而后继承这个类,去除注释代码
 
import { AxiosResponse } from "axios";

export class AbpServiceBase {

    protected transformResult(url: string, response: AxiosResponse, processor: (response: AxiosResponse) => Promise<any>): Promise<any> {
        // if(response.data.result){ 
        //     response.data=response.data.result;
        // }
        console.log(response) 
        return processor(response);
    }
}

  

修改 File.liquid 文件,在48行增长 :api

import { AbpServiceBase } from './abp-service-base';
 
在项目的 packge.json scripts 中增长:
  "genApi":"cd nswag &.\\refresh.bat"
 
这样能够不用每次输入代码执行生成
 
相关文章
相关标签/搜索