Многократные перенаправления на конечную точку сваггера, используя сваггер в экспресс-приложении с безсерверным - PullRequest
0 голосов
/ 15 марта 2019

Я делаю приложение с помощью Express-Serverless и хочу использовать swagger-jsdoc и swagger-ui-express во время автономной разработки.Это моя конфигурация для swagger:

const express = require('serverless-express/express');
const router = express.Router();

const options = {
    swaggerDefinition: {
        info: {
            title: 'REST - Swagger',
            version: '1.0.0',
            description: 'REST API with Swagger doc',
            contact: {
                email: 'me@someemail.com'
            }
        },
        tags: [
            {
                name: 'Stuff',
                description: 'Stuff API'
            }
        ],
        schemes: ['http'],
        host: 'localhost:9002',
        basePath: '/docs'
    },
    apis: ['./**/route.js']
}

const swaggerJSDoc = require('swagger-jsdoc');
const swaggerUi = require('swagger-ui-express');
const swaggerSpec = swaggerJSDoc(options);
require('swagger-model-validator')(swaggerSpec);

router.get('/api-docs.json', function (req, res) {
    res.setHeader('Content-Type', 'application/json');
    res.send(swaggerSpec);
})

router.use('/api-docs', swaggerUi.serve, swaggerUi.setup(swaggerSpec));

function validateModel(name, model) {
    const responseValidation = swaggerSpec.validateModel(name, model, false, true)
    if (!responseValidation.valid) {

        console.error(responseValidation.errors);
        throw new Error(`Some error`)
    }
}

module.exports = {
    router,
    validateModel
}

И в файле handler.js:

// ... some imports and code
app.use("/", index);
// ... others routes

// Swagger
app.use("/docs", swagger.router); // <-- it refers to the configuration above 

exports.handler = handler(app);

Когда я получаю доступ http://localhost:9002/docs/api-docs.json, я получаю конфигурацию JSON, но если я получаю доступhttp://localhost:9002/docs/api-docs Я получаю несколько перенаправлений на один и тот же URL и никогда не отображаю интерфейс Swagger.

ОБНОВЛЕНИЕ

Извините, моя ошибка, я используюserverless-express / express вместо express

Любая помощь приветствуется.Заранее спасибо!

1 Ответ

0 голосов
/ 18 марта 2019

Я нахожу это альтернативное решение:

  1. Я загружаю swagger-ui по адресу https://github.com/swagger-api/swagger-ui

  2. Скопируйте папку dist в мою общую папку вЭкспресс приложение

  3. Измените имя папки "dist" на "api-docs"

  4. И внутри index.html в "api-docs"папку измените строку

    url = "http://petstore.swagger.io/v2/swagger.json";

на:

url: "http://localhost:9002/api-docs.json",

Теперь, когда я получаю доступ к http://localhost:9002/api-docs/index.html, я вижустраница swagger-ui работает нормально!

...