如何使用 swagger-ui-express 加载 YAML 文件?

Mar*_*ric 2 node.js swagger

我有以下问题 - 我正在使用 swagger-ui-express,当我不在开发环境中时,我面临着 swagger 的解析问题;

{"message":"Parsing swagger document failed. SyntaxError: Unexpected token :"}
Run Code Online (Sandbox Code Playgroud)

这是在我的 swagger.js 中:

const {developmentEnv} = config;
    const swaggerFile = developmentEnv
        ? jsYaml.safeLoad(fs.readFileSync('./src/api/swagger.yml'))
        : require('../../api/swagger.yml');
Run Code Online (Sandbox Code Playgroud)

我认为,问题在于require。Yaml 似乎是这里的问题。有人可以帮我解决这个问题吗?

kav*_*gun 10

这里的问题是需要 .yaml 文件。

文件明确指出,

要加载 swagger 规范 yaml 文件,您需要使用能够将 yaml 转换为 json 的模块;例如 yamljs。

这是链接https://www.npmjs.com/package/swagger-ui-express#load-swagger-from-yaml-file

例如,试试这个,它有效:

const express = require('express');
const path = require('path');
const pathToSwaggerUi = require('swagger-ui-dist').absolutePath();
const YAML = require('yamljs');

const swaggerDocument = YAML.load('swagger-config.yaml');
console.log(swaggerDocument);

const swaggerJsonDocument = require('./swagger.json');
console.log(swaggerJsonDocument);

const app = express();
app.use(express.static(pathToSwaggerUi))
app.use(express.json());
app.use(express.static(path.join(__dirname, '../views')));

app.get('/', (req, res) => {
    res.send(`Hello World!`);
});
app.listen(2000, console.log(`App Listening to port 2000`));
Run Code Online (Sandbox Code Playgroud)

在您的情况下,您可以通过导入模块yamljs编写如下代码:

首先,npm install yamljs

   const swaggerFile = developmentEnv ? YAML.load('swagger-config.yaml') : require('./swagger.json');
Run Code Online (Sandbox Code Playgroud)