当我尝试使用 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());
上面的代码只是显示一个空白屏幕
我相信这是因为
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());