Swagger-jsdoc не ссылается на файл yaml - PullRequest
0 голосов
/ 11 июля 2019

Мои swagger-jsdoc и swagger-ui-express настройки для документирования моего экспресс-приложения, по-видимому, не могут прочитать или сослаться на файлы YAML, на которые я указываю их

Я все еще учусь документировать API, и я использовал эту статью https://www.codementor.io/peteradeoye/splitting-your-swagger-spec-into-multiple-files-in-a-node-project-nuprc0mej в качестве руководства, но я не могу воспроизвести желаемые результаты

Это мой app.js

import 'core-js/stable';
import 'regenerator-runtime/runtime';
import express from 'express';
import bodyParser from 'body-parser';
import cors from 'cors';
import swaggerUI from 'swagger-ui-express';
import swaggerSpec from './config/swagger';
import allRoutes from './routes';


const app = express();

app.use('/api-docs', swaggerUI.serve, swaggerUI.setup(swaggerSpec));
app.use(cors());
app.use(bodyParser.urlencoded({
  extended: true,
}));
app.use(bodyParser.json());

allRoutes(app);

export default app;

Это мой чванский конфиг на ./config/swagger

const swaggerJSDoc = require('swagger-jsdoc');

const swaggerDefinition = {
  info: {
    title: 'REST API for Wayfarer', // Title of the documentation
    version: '1.0.0', // Version of the app
    description: 'This is the REST API for Wayfarer (a public bus transportation booking server.)', // short description of the app
  },
  host: 'localhost:3000', // the host or url of the app
  basePath: '/api/v1', // the basepath of your endpoint
};

// options for the swagger docs
const options = {
  // import swaggerDefinitions
  swaggerDefinition,
  // path to the API docs
  apis: ['./docs/**/*.yaml'],
};
// initialize swagger-jsdoc
export default swaggerJSDoc(options);

и это один из ямлов, на которые я ссылаюсь на ./docs/user.yaml

paths:
  /auth/signup:                # path of the user from your endpoint
    post:                 # endpoint request type (post request)
      tags:               # Tag property
        - User            # Value of the tag
      summary: creates a new user
      produces:
      - application/json
      parameters:         # request parameters
      - in: body          # request body
        name: sign up     # name of the request, can be any name
        description: It enables a user to create an account
        required: false   # can also be true depending on user preference
        schema:           # Schema definition
          $ref: '#/definitions/signUp' 
      responses:          # server responses
        201:
          description: An object with user details
definitions:        # Schema definition for the request body
  signUp:
    type: object
        properties:
          username:
            type: string
          email:
            type: string
          password:
            type: string

Я ожидал увидеть некоторую информацию, которая будет отображаться при попытке просмотреть мою документацию, но в моем браузере отображается No operations defined in the spec. Мне удалось сузить проблему до

...
const options = {
  // import swaggerDefinitions
  swaggerDefinition,
  // path to the API docs
  apis: ['./docs/**/*.yaml'],
};
...

Почему-то

...
apis: ['./docs/**/*.yaml'],
};
...

просто отказывается работать, я тоже переименовал папку docs, и это не помогло. Я переместил папку docs в корень моего проекта, сообщение об ошибке изменилось на Error: TypeError: Cannot convert undefined or null to object

...