问题描述
我需要使用NodeJS开发API,还需要为API开发文档。我集成了swagger auto-gen以创建swagger.json。但是,如果我按如下所示使用route.js,则swagger.json无法正确生成
var express = require('express');
module.exports = function(app) {
var userController = require('../controller/userController');
var apiRouter = express.Router();
var routerV1 = express.Router();
var routerV2 = express.Router();
app.use('/admin',apiRouter);
apiRouter.use("/v1",routerV1);
apiRouter.use("/v2",routerV2);
routerV1.route('/users').get(userController.getUsersV1);
routerV2.route('/users').get(userController.getUsersV2);
}
,并将这些route.js映射到swagger.js
我们需要为所有控制器创建路由文件吗?
解决方法
swagger-autogen的2.0.0版本添加了此功能。以前的版本无法识别路由。对于您而言,生成文件swagger.js和其他文件的最佳方法是:
文件:swagger.js
const swaggerAutogen = require('swagger-autogen')();
const outputFile = './swagger_output.json';
const endpointsFiles = ['./index.js'];
swaggerAutogen(outputFile,endpointsFiles).then(() => {
require('./index.js'); // Your project's root file
})
文件: index.js
const swaggerUi = require('swagger-ui-express')
const swaggerFile = require('./swagger_output.json');
const express = require('express');
const app = express();
const router = require('./routes');
app.use(router);
app.use('/doc',swaggerUi.serve,swaggerUi.setup(swaggerFile));
app.listen(3000);
文件: routes.js
const express = require('express');
const userController = require('../controller/userController');
const apiRouter = express.Router();
const routerV1 = express.Router();
const routerV2 = express.Router();
app.use('/admin',apiRouter);
apiRouter.use("/v1",routerV1);
apiRouter.use("/v2",routerV2);
routerV1.route('/users').get(userController.getUsersV1);
routerV2.route('/users').get(userController.getUsersV2);
module.exports = apiRouter;
使用以下命令更新模块: npm -i swagger-autogen@2.0.2
并使用以下命令运行您的项目: node swagger.js
我希望它能对您有所帮助。如果需要,请看以下示例: swagger-autogen using router