目前我们正在做以下工作:
使用如下所示的 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
的使用方式?还是我们缺少某种依赖注入来获取我们的业务/数据库逻辑?希望我们的问题足够清楚。