Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

No operations defined in spec! - I get this error even though the swagger is setup and the end points are defined

Tags:

I am trying to setup swagger on top of my node application using the swagger npm package. I have my end points and swagger setup perfect(atleast almost perfect), I did do quiet a lot of research on whats going wrong but I couldn't find the trace. My swagger setup file:

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; 

My end points are defined in ./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; 

I was expecting the 2 end points to show up on the page. But instead I get the 'No operations defined in spec!' error. What am I missing? Any help is appreciated.

like image 821
Saranya Garimella Avatar asked Jun 26 '19 21:06

Saranya Garimella


2 Answers

It may be that there is an issue with how you are referencing your routes. The referencing must always start from the root of your application. So './routes/abc.js' must be changed to 'the-folder-name-in-root/routes/abc.js'

like image 160
Wisdom Avatar answered Dec 02 '22 18:12

Wisdom


Try change apis path from apis: ['./routes/abc.js'] to apis: [`${__dirname}/routes/abc.js`] to make it the full path from the root folder. That works for me.

like image 32
klee1611 Avatar answered Dec 02 '22 19:12

klee1611