Skip to content

Commit deaf3a2

Browse files
feature(@nestjs/core) make cors middleware customizable
1 parent 400bfb5 commit deaf3a2

4 files changed

Lines changed: 29 additions & 6 deletions

File tree

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
export type CustomOrigin = (
2+
requestOrigin: string,
3+
callback: (err: Error | null, allow?: boolean) => void,
4+
) => void;
5+
6+
export interface CorsOptions {
7+
origin?: boolean | string | RegExp | (string | RegExp)[] | CustomOrigin;
8+
methods?: string | string[];
9+
allowedHeaders?: string | string[];
10+
exposedHeaders?: string | string[];
11+
credentials?: boolean;
12+
maxAge?: number;
13+
preflightContinue?: boolean;
14+
optionsSuccessStatus?: number;
15+
}
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
import { HttpsOptions } from './https-options.interface';
22
import { LoggerService } from '../services/logger.service';
33
import { NestApplicationContextOptions } from './nest-application-context-options.interface';
4+
import { CorsOptions } from './external/cors-options.interface';
45

56
export interface NestApplicationOptions extends NestApplicationContextOptions {
6-
cors?: boolean;
7+
cors?: boolean | CorsOptions;
78
bodyParser?: boolean;
89
httpsOptions?: HttpsOptions;
910
}

src/common/interfaces/nest-application.interface.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { WebSocketAdapter } from './web-socket-adapter.interface';
33
import { CanActivate } from './can-activate.interface';
44
import { NestInterceptor } from './nest-interceptor.interface';
55
import { INestApplicationContext } from './nest-application-context.interface';
6+
import { CorsOptions } from './external/cors-options.interface';
67

78
export interface INestApplication extends INestApplicationContext {
89
/**
@@ -49,7 +50,7 @@ export interface INestApplication extends INestApplicationContext {
4950
*
5051
* @returns void
5152
*/
52-
enableCors(): this;
53+
enableCors(options?: CorsOptions): this;
5354

5455
/**
5556
* A wrapper function around native `express.disable()` method.

src/core/nest-application.ts

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import {
2222
isNil,
2323
isUndefined,
2424
validatePath,
25+
isObject,
2526
} from '@nestjs/common/utils/shared.utils';
2627
import { MicroserviceConfiguration } from '@nestjs/common/interfaces/microservices/microservice-configuration.interface';
2728
import { ExpressAdapter } from './adapters/express-adapter';
@@ -37,6 +38,7 @@ import { MiddlewaresContainer } from './middlewares/container';
3738
import { NestApplicationContext } from './nest-application-context';
3839
import { HttpsOptions } from '@nestjs/common/interfaces/https-options.interface';
3940
import { NestApplicationOptions } from '@nestjs/common/interfaces/nest-application-options.interface';
41+
import { CorsOptions } from '@nestjs/common/interfaces/external/cors-options.interface';
4042

4143
const { SocketModule } =
4244
optional('@nestjs/websockets/socket-module') || ({} as any);
@@ -83,10 +85,14 @@ export class NestApplication extends NestApplicationContext
8385
}
8486

8587
public applyOptions() {
86-
if (!this.appOptions) {
88+
if (!this.appOptions || !this.appOptions.cors) {
8789
return undefined;
8890
}
89-
this.appOptions.cors && this.enableCors();
91+
const isCorsOptionsObj = isObject(this.appOptions.cors);
92+
if (!isCorsOptionsObj) {
93+
return this.enableCors();
94+
}
95+
this.enableCors(this.appOptions.cors as CorsOptions);
9096
}
9197

9298
public createServer(): any {
@@ -215,8 +221,8 @@ export class NestApplication extends NestApplicationContext
215221
return this;
216222
}
217223

218-
public enableCors(): this {
219-
this.express.use(cors());
224+
public enableCors(options?: CorsOptions): this {
225+
this.express.use(cors(options));
220226
return this;
221227
}
222228

0 commit comments

Comments
 (0)