Nodjs swagger自动发电集成

问题描述

我需要使用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.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