我正在尝试使用 swagger npm 包在我的节点应用程序之上设置 swagger。我的端点和招摇设置很完美(至少几乎完美),我确实对出了什么问题做了很多研究,但我找不到痕迹。 我的 swagger 设置文件:
const express = require('express');
const path = require('path');
const cookieParser = require('cookie-parser');
const bodyParser = require('body-parser');
const swaggerJSDoc = require('swagger-jsdoc');
const swaggerUi = require('swagger-ui-express');
const abc= require('./routes/abc');
var app = express();
const swaggerDefinition = {
info: {
title: 'Analytics Project',
version: '1.0.0',
description: 'Analytics API swagger documentation'
}
};
const options = {
swaggerDefinition,
apis: ['./routes/abc.js']
};
const swaggerSpec = swaggerJSDoc(options);
var api = require('./routes/abc');
app.use('/', api);
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use('/api/v1/abc', abc);
app.use('/api/v1/abc/scatter', abc);
app.use('/api-docs', swaggerUi.serve, swaggerUi.setup(swaggerSpec));
module.exports = app;
我的端点在 ./routes/abc.js 中定义:
var express = require('express');
var router = require('express').Router();
const request = require('request');
/**
* @swagger
* /:
* get:
* description: Endpoint for everything
*/
router.get('/', function(req, res, next) { //End point1
res.send('hello from dataservice');
});
/**
* @swagger
* /scatter:
* post:
* description: Endpoint for all variations of scatter plots
*/
router.post('/scatter', function(req, res, next) { //end point2
res.json({users: [{name: 'Timmy'}]});
});
module.exports = router;
我期待 2 个端点出现在页面上。但我得到的是“规范中没有定义操作!”错误。我缺少什么?如有任何帮助,我们将不胜感激。
您引用路线的方式可能存在问题。引用必须始终从应用程序的根目录开始。所以
'./routes/abc.js'
必须改为'the-folder-name-in-root/routes/abc.js'
尝试将 api 路径从
apis: ['./routes/abc.js']
更改为 apis: [`${__dirname}/routes/abc.js`]
,使其成为根文件夹的完整路径。这对我有用。
我在 fastify 中遇到了同样的问题。 注册 swagger 后尝试
require()
您的路线。
神奇的是,它对我有用。
我的案例是:
当我在 swagger 之前注册路由时,它显示“规范中没有定义操作”:
fastify.register(require("./routes/route")); //registered routes BEFORE swagger
fastify.register(require("fastify-swagger"), {
exposeRoute: true,
routePrefix: "/docs",
swagger: {
info: { title: "SWAGGER API" },
}
});
//gave that issue with no warnings / errors in terminal or browser console
这有效:在大摇大摆之后注册路线
fastify.register(require("fastify-swagger"), {
exposeRoute: true,
routePrefix: "/docs",
swagger: {
info: { title: "SWAGGER API" },
}
});
fastify.register(require("./routes/route")); //registered routes after swagger
像这样制作api完整路径
apis: [__filename],
它对我有用
对我来说,当我添加
paths
时,它就起作用了,如下所示
* @swagger
* paths:
* /auth/login:
* post:
我通过将 URL 从
"../api/controllers/userController.js"
更改为 "./src/api/controllers/userController.js"
解决了这个问题。
因此,您必须输入从根文件夹开始的 URL。
在 .NET 6 中对我有帮助的是我忘记指定我正在使用控制器。这段小代码解决了我在 Program.cs 中的问题:
builder.Services.AddControllers();
也许如果您使用类似的配置,您需要指定项目“my.root.package”的根包
@Bean
public Docket productApi(){
return new Docket(DocumentationType.SWAGGER_2).select()
.apis(RequestHandlerSelectors.basePackage("my.root.package")).build();
}
在 .NET 6 中不要忘记添加
app.MapControllers();
随着
builder.Services.AddControllers();
(如系统调用所述)
始终从应用程序的根目录开始引用。
const path = require('path');
const options = {
definition: {},
apis: [path.join(process.cwd(), '/routes/*.routes.js')],
};
我遇到了同样的错误,我能够立即解决它,我意识到我引用了错误的包。
@Bean
public Docket api() {
return new Docket(DocumentationType.SWAGGER_2)
.select()
.paths(PathSelectors.any())
.apis(RequestHandlerSelectors.basePackage("com.korede.liberations"))
.build()
.apiInfo(apiDetails());
}
以防万一有人遇到同样的问题,请检查您在
中引用的包RequestHandlerSelectors.basePackage()
就我而言,问题出在包裹上。 我使用 springBoot 和 eclipse STS 作为 IDE。 Swagger 没有读取控制器。 我必须从基础包重新创建每个包。 将右侧按钮拉到基础包上,然后选择新包。 逐个。 最后我将每个类移动到它的包中。 当我运行时,swagger 会正确显示端点。