使用openapi-generator-cli nodejs-express-server编写Node业务逻辑

4

目前我们正在执行以下操作:

使用类似以下的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的方法?或者,我们缺少某种依赖注入来将业务/数据库逻辑引入其中?希望我们的问题足够清晰明了。

1
你有关于这个话题的任何知识可以分享吗?我正在尝试使用NodeJS后端实现一个应用程序,但我很难理解如何将实际业务逻辑与生成的类集成。谢谢。 - Ancelot182
据我所知,这是使用此工具及类似工具时的一个合法关注点/问题,导致本文称它可以推荐该工具,但它并不可用...哈哈 https://techsparx.com/software-development/openapi/openapi-nodejs-servers.html。我们的计划是开发一些工作流程,其中将包括在代码生成后移动和修改文件。我们认为只需尽可能少地修改生成的文件即可。 - kmanzana
1个回答

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接