使用 expressJS-swaggerui 渲染页面

问题描述 投票:0回答:1

当我尝试使用 swagger-ui-express 插件调用从 expressJS 呈现 swaggerUI 的路由时,我得到一个空白页面。

基本上,我有一条路线“/api-docs/prd”。调用路由时,我想下载文件,解析并将 json 发送到 swagger UI。

到目前为止,我有下载文件并在 SwaggerUI 中呈现数据的功能(有效).

const downloadAsYAML = async () => {
  const bucket ='buc';
  const path = 'openapi_prd.yaml';
 const file = await new Storage()
   .bucket(bucket)
   .file(path)
   .download();
  var x = yaml.parse(file[0].toString('utf8'))
  return x;
}

downloadAsYAML().then((res)=>{
app.use('/api-docs/prd', swaggerUi.serveFiles(res, options), swaggerUi.setup(null,options));
});

但是,我想要一个先下载文件然后调用 swaggerUI 的路由。示例:调用路由时,下载文件,然后将值传递给 swaggerUI

 app.get('/api-docs/prd', function(req, res, next){
  downloadAsYAML('openapi_prd.yaml').then((result)=>{
    swaggerDocument=result;  //swaggerDocument is define with null
  });
  next();
}, swaggerUi.serveFiles(swaggerDocument, options), swaggerUi.setup());

上面的代码只是显示一个空白屏幕

node.js express swagger-ui
1个回答
0
投票

我相信这是因为

next()
函数在
downloadAsYAML
生成的Promise可以解决之前被调用。

尝试这样的事情:

app.get('/api-docs/prd', function(req, res, next){
  downloadAsYAML('openapi_prd.yaml').then((result)=>{
    swaggerDocument=result;
    next(); // -> ensure next() is only called after setting `swaggerDocument`
  });
}, swaggerUi.serveFiles(swaggerDocument, options), swaggerUi.setup());
© www.soinside.com 2019 - 2024. All rights reserved.