I am using nest js and swagger as documentation but Swagger module ignores setGlobalPrefix(). in my environemnt the api prefix is API_PREFIX=/api/v2 , I have no problem when testing it with postman cause the endpoints/url does work which is http://localhost:5000/api/v2/user/profile
but the swagger cant get the /api/v2 prefix , the swagger request url is http://localhost:5000/user/profile which is wrong.
Any idea ? Thank you for any help.
```const SWAGGER_PREFIX = '/docs';
async function bootstrap(): Promise<void> {
const app = await NestFactory.create(AppModule);
if (!process.env.SWAGGER_ENABLE || process.env.SWAGGER_ENABLE === '1') {
// eslint-disable-next-line @typescript-eslint/no-use-before-define
createSwagger(app);
}
app.use(bodyParser.json());
app.use(helmet());
app.use(
cors({
origin: process.env.API_CORS || '*'
})
);
app.setGlobalPrefix(process.env.API_PREFIX || API_DEFAULT_PREFIX);
const logInterceptor = app.select(CommonModule).get(LogInterceptor);
app.useGlobalInterceptors(logInterceptor);
await app.listen(process.env.API_PORT || API_DEFAULT_PORT);
}
function createSwagger(app: INestApplication) {
const version = require('../package.json').version || '';
const options = new DocumentBuilder()
.setTitle(SWAGGER_TITLE)
.setDescription(SWAGGER_DESCRIPTION)
.setVersion(version)
.setBasePath(process.env.API_PREFIX || API_DEFAULT_PREFIX)
.addBearerAuth()
.build();
const document = SwaggerModule.createDocument(app, options);
SwaggerModule.setup(SWAGGER_PREFIX, app, document);[![enter image description here][1]][1]
//swagger - the request url is http://localhost:5000/user/profile
which is supposed to be http://localhost:5000/api/v2/user/profile
are you sure that this line
app.setGlobalPrefix(process.env.API_PREFIX || API_DEFAULT_PREFIX);
and this line, evaluates the same
.setBasePath(process.env.API_PREFIX || API_DEFAULT_PREFIX)
You should create the swagger (call to createSwagger
in function bootstrap
) after having set the global prefix of your api (call to setGlobalPrefix
in function bootstrap
). It will then find the api prefix on its own a prepend any request with it.
async function bootstrap(): Promise<void> {
const app = await NestFactory.create(ApplicationModule);
app.setGlobalPrefix(process.env.API_PREFIX || API_DEFAULT_PREFIX);
if (!process.env.SWAGGER_ENABLE || process.env.SWAGGER_ENABLE === 'true') {
createSwagger(app);
}
await app.listen(process.env.API_PORT || API_DEFAULT_PORT);
}
function createSwagger(app: INestApplication) {
const version = require('../package.json').version || '';
const options = new DocumentBuilder()
.setTitle(SWAGGER_TITLE)
.setDescription(SWAGGER_DESCRIPTION)
.setVersion(version)
.build();
const document = SwaggerModule.createDocument(app, options);
SwaggerModule.setup(SWAGGER_PREFIX, app, document);
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With