1

目前我们正在做以下工作:

使用如下所示的 openapitools.json:

{
  "$schema": "node_modules/@openapitools/openapi-generator-cli/config.schema.json",
  "spaces": 2,
  "generator-cli": {
    "version": "5.1.1",
    "generators": {
      "node_v1.0": {
        "generatorName": "nodejs-express-server",
        "output": "#{cwd}/api/gen/v1.0/#{name}",
        "glob": "openapi/*.yaml"
      }
    }
  }
}

我们运行一个命令:

npx openapi-generator-cli generate

它创建了这个gen目录,其结构如下:

- api
- controllers
- services
- utils

等等

目前,我们的业务和数据库逻辑解决方案是转到controllers/DefaultController.js并更改 Service 的 require 链接以指向我们的实际src/business_logic/Service.js代码。在我们的 Service.js 代码中,我们调用端点中的其他逻辑,例如:

static getMaterials() {
    const payload = MaterialLogic.materialFetchAll();
    const code = 200;
    return { payload, code };
}

作为参考,生成的代码如下所示,但您可以看到没有逻辑:

/**
* Returns list of materials
*
* returns List
* */
const getMaterials = () => new Promise(
  async (resolve, reject) => {
    try {
      resolve(Service.successResponse({
      }));
    } catch (e) {
      reject(Service.rejectResponse(
        e.message || 'Invalid input',
        e.status || 405,
      ));
    }
  },
);

对此的 OpenAPI 规范如下所示:

/materials:
  get:
    operationId: getMaterials
    description: Returns list of materials
    responses:
      200:
        description: list of Materials
        content:
          application/json:
            schema:
              type: array
              items:
                $ref: '#/components/schemas/Material'
      401:
        description: not authorized to use this endpoint

显然,我们必须更改任何代码gen以使我们的应用程序正常工作是错误的方法,因为它需要随时被覆盖和生成(因此使用 openapi gen 工具的全部意义)。这样做的正确方法是什么?在我们的 openapi 规范中,有没有办法指定不同Service.js的使用方式?还是我们缺少某种依赖注入来获取我们的业务/数据库逻辑?希望我们的问题足够清楚。

4

0 回答 0