我正在尝试寻找一种解决方案,可以在一个express应用程序中拥有多个swaggerUi文档。
我使用的是:
"typescript": "^2.5.2",
"swagger-tools": "^0.10.1",
"express": "^4.15.3",
"express-openapi": "^1.0.1",我的swagger文档文件部分是由项目文件架构生成的。
我该怎么做呢?
编辑
现在,我像这样初始化swaggerUi:
const openapi = Openapi.initialize({
paths: openApiPaths,
expressApp,
swaggerApiDoc,
});
const openApiSpec: any = openapi.apiDoc;
app.use(swaggerUI(openApiSpec));其中openApiPaths包含swagger文档的paths:{}
发布于 2019-09-17 21:54:17
晚了一年,但仍然有效:
async function initialize (app) {
const authenticationSpec = path.join(__dirname,'api/authentication.yaml');
const authenticationMiddleware = await useSwaggerMiddlewares(authenticationSpec, {
router: routerOptions,
validator: validatorOptions,
});
// NOTE the metadata must be mounted at root level!
app.use(authenticationMiddleware.metadata);
app.use('/v2/authentication', authenticationMiddleware.validator);
app.use('/v2/authentication', authenticationMiddleware.router);
app.use('/v2/authentication', authenticationMiddleware.ui);
const mainSpec = path.join(__dirname,'api/swagger.yaml');
const mainMiddleware = await useSwaggerMiddlewares(mainSpec, {
router: routerOptions,
validator: validatorOptions,
});
app.use(mainMiddleware.metadata);
app.use(mainMiddleware.validator);
app.use(mainMiddleware.router);
app.use(mainMiddleware.ui);
// Start the server
http.createServer(app).listen(serverPort, () => console.log(`server lintening on port ${serverPort}`);
}
initialize(app);使用此处定义的useSwaggerMiddlewares
module.exports = function useSwaggerMiddlewares (swaggerSpec, {
router: routerOptions, validator: validatorOptions,
}) {
return new Promise((resolve, reject) => {
try {
// The Swagger document (require it, build it programmatically, fetch it from a URL, ...)
const spec = fs.readFileSync(swaggerSpec, 'utf8');
const swaggerDoc = jsyaml.safeLoad(spec);
// Initialize the Swagger middleware
swaggerTools.initializeMiddleware(swaggerDoc, (middleware) => {
try {
return resolve({
// Interpret Swagger resources and attach metadata to request - must be first in swagger-tools middleware chain
metadata: middleware.swaggerMetadata(),
// Validate Swagger requests
validator: middleware.swaggerValidator(validatorOptions),
// Route validated requests to appropriate controller
router: middleware.swaggerRouter(routerOptions),
// Serve the Swagger documents and Swagger UI
ui: middleware.swaggerUi()
});
} catch (error) {
console.error(error);
return reject(error);
}
});
} catch (error) {
console.error(error);
return reject(error);
}
});
};发布于 2018-01-23 17:42:05
您可以在一台express服务器上托管多个apis,您只需确保basePath不会相互重叠即可。
参考:https://github.com/apigee-127/swagger-tools/issues/530
swaggerTools.initializeMiddleware(doc1, function (mw1) {
// Do stuff with first middleware
swaggerTools.initializeMiddleware(doc2, function (mw2) {
// Do stuff with second middleware
// Repeat...
});
});https://stackoverflow.com/questions/48339325
复制相似问题