25

我正在尝试使用 swagger npm 包在我的节点应用程序之上设置 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 个端点出现在页面上。但相反,我得到了“规范中没有定义的操作!” 错误。我错过了什么?任何帮助表示赞赏。

4

8 回答 8

14

您引用路线的方式可能存在问题。引用必须始终从应用程序的根目录开始。所以'./routes/abc.js'必须改为'the-folder-name-in-root/routes/abc.js'

于 2019-10-09T15:21:10.730 回答
5

尝试将 api 路径从apis: ['./routes/abc.js']to更改apis: [`${__dirname}/routes/abc.js`]为从根文件夹开始的完整路径。这对我行得通。

于 2021-06-02T09:46:37.750 回答
4

对我来说,当我paths像下面这样添加时它起作用了

 * @swagger
 * paths:
 *  /auth/login:
 *    post:
于 2021-02-01T05:14:56.893 回答
3

我通过将 URL 从 更改为 解决了这个"../api/controllers/userController.js"问题"./src/api/controllers/userController.js"。因此,您必须从根文件夹开始输入 URL。

于 2021-05-07T13:04:48.783 回答
3

使这样的api完整路径apis: [__filename], 对我有用

于 2020-06-04T08:09:50.807 回答
1

也许如果您使用类似的配置,您需要指定项目“my.root.package”的根包

@Bean
public Docket productApi(){
return new Docket(DocumentationType.SWAGGER_2).select()
           .apis(RequestHandlerSelectors.basePackage("my.root.package")).build();
        }
于 2022-01-20T03:52:47.217 回答
1

我在 fastify 上遇到了同样的问题。注册招摇后尝试“要求()”您的路线。神奇的是,它对我有用。我的情况是:

当我在招摇之前注册路线时,它显示“规范中没有定义操作”:

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
于 2021-12-29T07:36:36.353 回答
0

在 .NET 6 中帮助我的是我忘记指定我正在使用控制器。这段小代码解决了我在 Program.cs 中的问题:

builder.Services.AddControllers();
于 2022-03-04T16:47:34.037 回答