Lucas_Camara 15 de fev. de 2022 1 like
Nunca usei esse pacote, mas pelo que entendi pela documentação, em vez de criar o json, vc pode usar a swagger-jsdoc :
// Initialize swagger-jsdoc -> returns validated swagger spec in json format
const swaggerSpec = swaggerJSDoc ( options );
app . use ( '/api-docs' , swaggerUi . serve , swaggerUi . setup ( swaggerSpec ));
Exemplo das options (tem no link da documentação do swaggerJSDoc:
const swaggerJsdoc = require ( 'swagger-jsdoc' );
const options = {
definition : {
openapi : '3.0.0' ,
info : {
title : 'Hello World' ,
version : '1.0.0' ,
},
},
apis : [ './src/routes*.js' ], // files containing annotations as above
};
Pelo que entendi, esse pacote lê os dados dos endpoints que possuem:
/**
* @ openapi
* / :
* get :
* description : Welcome to swagger - jsdoc !
* responses :
* 200 :
* description : Returns a mysterious string .
*/
app . get ( '/' , ( req , res ) = > {
res . send ( 'Hello World!' );
});
guilhermebhte 15 de fev. de 2022
Dá este erro
C : \ sistemas \ zanzar \ zanzar - api \ api \ app . js : 46
app . use ( "/api/" + version , versionRoutes , swaggerUi . serve , swaggerUi . setup ( swaggerSpec ));
ReferenceError : swaggerUi is not defined
at C : \ sistemas \ zanzar \ zanzar - api \ api \ app . js : 46 : 45
at Array . forEach ( < anonymous > )
at Object . < anonymous > ( C : \ sistemas \ zanzar \ zanzar - api \ api \ app . js : 44 : 10 )
at Module . _compile ( node : internal / modules / cjs / loader : 1101 : 14 )
at Object . Module . _extensions .. js ( node : internal / modules / cjs / loader : 1153 : 10 )
at Module . load ( node : internal / modules / cjs / loader : 981 : 32 )
at Function . Module . _load ( node : internal / modules / cjs / loader : 822 : 12 )
at Function . executeUserEntryPoint [ as runMain ] ( node : internal / modules / run_main : 81 : 12 )
at node : internal / main / run_main_module : 17 : 47
[ nodemon ] app crashed - waiting for file changes before starting ...
Lucas_Camara 15 de fev. de 2022 1 like
Vc removeu essa linha:
const swaggerUi = require ( 'swagger-ui-express' );
?
guilhermebhte 15 de fev. de 2022
[ nodemon ] starting ` node . / api / app . js zanzar - api `
C : \ sistemas \ zanzar \ zanzar - api \ api \ app . js : 22
const swaggerSpec = swaggerJSDoc ( options );
^
ReferenceError : swaggerJSDoc is not defined
at Object . < anonymous > ( C : \ sistemas \ zanzar \ zanzar - api \ api \ app . js : 22 : 21 )
at Module . _compile ( node : internal / modules / cjs / loader : 1101 : 14 )
at Object . Module . _extensions .. js ( node : internal / modules / cjs / loader : 1153 : 10 )
at Module . load ( node : internal / modules / cjs / loader : 981 : 32 )
at Function . Module . _load ( node : internal / modules / cjs / loader : 822 : 12 )
at Function . executeUserEntryPoint [ as runMain ] ( node : internal / modules / run_main : 81 : 12 )
at node : internal / main / run_main_module : 17 : 47
[ nodemon ] app crashed - waiting for file changes before starting ...
Lucas_Camara 15 de fev. de 2022 1 like
Vc declarou:
const swaggerJsdoc = require ( 'swagger-jsdoc' );
?
guilhermebhte 15 de fev. de 2022
const express = require ( "express" );
const logger = require ( "morgan" );
const bodyParser = require ( "body-parser" );
const cors = require ( "cors" );
const validator = require ( "express-validator" );
const helmet = require ( "helmet" );
const swaggerUi = require ( 'swagger-ui-express' );
const swaggerJsdoc = require ( 'swagger-jsdoc' );
const options = {
definition : {
openapi : '3.0.0' ,
info : {
title : 'Hello World' ,
version : '1.0.0' ,
},
},
apis : [ './src/routes*.js' ], // files containing annotations as above
};
const swaggerSpec = swaggerJSDoc ( options );
Lucas_Camara 15 de fev. de 2022 1 like
Repare que o case está diferente:
import: swaggerJsdoc
uso: swaggerJSDoc
guilhermebhte 15 de fev. de 2022
Lucas_Camara 15 de fev. de 2022 1 like
Nada sô, acontece. Já perdi horas num problema que era causado por um ponto-e-virgula kkkkk
guilhermebhte 15 de fev. de 2022
No java, eu acesso assim: http://localhost:9600/s3-amazon-api/swagger-ui.html#/
No node, estou tentando acessar assim: http://localhost:3000/api/v2/swagger-ui.html . O sistema acesso assim:http://localhost:3000/api/v2/dashboard/listar-campanhas
Configuração do node.
const options = {
definition : {
openapi : "3.0.0" ,
info : {
title : "Zanzar" ,
version : "v2" ,
},
},
apis : [ "/api/V2" ],
};
const swaggerSpec = swaggerJsdoc ( options );
versions . forEach (( version ) => {
const versionRoutes = require ( "./" + version + "/routes" );
app . use (
"/api/" + version ,
versionRoutes ,
swaggerUi . serve ,
swaggerUi . setup ( swaggerSpec )
);
});
Lucas_Camara 15 de fev. de 2022 1 like
Nas options, em apis, vc deve informar os arquivos onde os endpoints estão declarados e devidamente comentadados de acordo com a documentação da swaggerJsdoc.
No exemplo da documentação está assim:
apis : [ ' . / src / routes * . js ' ] , // veja que é o caminho dos arquivos onde estão as rotas (os endpoints no caso)
A url a ser acessada deve ser a definida aqui:
app . use ( ' / api - docs ' , swaggerUi . serve , swaggerUi . setup ( swaggerSpec ));
^
guilhermebhte 15 de fev. de 2022
Sim, no caso, o sistema ele tem as rotas definidas por aqui
As rotas estão na pasta V2/routes.js
E aqui está asim:
const router = require ( "express" ) . Router ();
const { lstatSync , readdirSync } = require ( "fs" );
const { join } = require ( "path" );
readdirSync ( __dirname )
. filter ( function ( item ) {
return lstatSync ( join ( __dirname , item )) . isDirectory ();
})
. forEach ( function ( item ) {
router . use ( "/" + item , require ( "./" + item + "/routes" ));
});
router . use ( "/test" , ( req , res ) => {
res . status ( 200 ) . json ( req . headers );
});
module . exports = router ;
Lucas_Camara 15 de fev. de 2022 1 like
Parece que o swaggerJsDoc usa um padrão no comentário para montar as coisas, como nesse exemplo:
/**
* @ openapi
* / :
* get :
* description : Welcome to swagger - jsdoc !
* responses :
* 200 :
* description : Returns a mysterious string .
*/
app . get ( '/' , ( req , res ) = > {
res . send ( 'Hello World!' );
});
guilhermebhte 15 de fev. de 2022
Assim
/**
* @ openapi
* / :
* get :
* description : Lista todas as campanhas
* responses :
* 200 :
* description : Returns a mysterious string .
*/
router . get ( "/listar-campanhas" , [], controller . listarCampanhas );
guilhermebhte 15 de fev. de 2022