From 2024b2a446c32794b1d0901ac3ef7b3ed974cb1f Mon Sep 17 00:00:00 2001 From: Svetlana Kolosova Date: Thu, 24 Oct 2019 11:45:51 +0300 Subject: [PATCH] feat(): add ip route param --- .../decorators/http/route-params.decorator.ts | 13 +++++++++++++ packages/common/enums/route-paramtypes.enum.ts | 1 + packages/core/router/route-params-factory.ts | 2 ++ .../core/test/router/route-params-factory.spec.ts | 8 ++++++++ 4 files changed, 24 insertions(+) diff --git a/packages/common/decorators/http/route-params.decorator.ts b/packages/common/decorators/http/route-params.decorator.ts index 860fefacf12..b14469be071 100644 --- a/packages/common/decorators/http/route-params.decorator.ts +++ b/packages/common/decorators/http/route-params.decorator.ts @@ -106,6 +106,19 @@ export const Next: () => ParameterDecorator = createRouteParamDecorator( RouteParamtypes.NEXT, ); +/** + * Route handler parameter decorator. Extracts the `Ip` property + * from the `req` object and populates the decorated + * parameter with the value of `ip`. + * + * @see [Request object](https://docs.nestjs.com/controllers#request-object) + * + * @publicApi + */ +export const Ip: () => ParameterDecorator = createRouteParamDecorator( + RouteParamtypes.IP, +); + /** * Route handler parameter decorator. Extracts the `Session` object * from the underlying platform and populates the decorated diff --git a/packages/common/enums/route-paramtypes.enum.ts b/packages/common/enums/route-paramtypes.enum.ts index ccb2aa97e7c..70c5689b205 100644 --- a/packages/common/enums/route-paramtypes.enum.ts +++ b/packages/common/enums/route-paramtypes.enum.ts @@ -9,4 +9,5 @@ export enum RouteParamtypes { SESSION, FILE, FILES, + IP, } diff --git a/packages/core/router/route-params-factory.ts b/packages/core/router/route-params-factory.ts index 1bb754e0a90..7218b3b742b 100644 --- a/packages/core/router/route-params-factory.ts +++ b/packages/core/router/route-params-factory.ts @@ -32,6 +32,8 @@ export class RouteParamsFactory implements IRouteParamsFactory { return req[data || 'file']; case RouteParamtypes.FILES: return req.files; + case RouteParamtypes.IP: + return req.ip; default: return null; } diff --git a/packages/core/test/router/route-params-factory.spec.ts b/packages/core/test/router/route-params-factory.spec.ts index c2e130f07ac..52e26753e0f 100644 --- a/packages/core/test/router/route-params-factory.spec.ts +++ b/packages/core/test/router/route-params-factory.spec.ts @@ -11,6 +11,7 @@ describe('RouteParamsFactory', () => { const res = {}; const next = () => ({}); const req = { + ip: 'ip', session: null, body: { foo: 'bar', @@ -73,6 +74,13 @@ describe('RouteParamsFactory', () => { ).to.be.eql(req.headers); }); }); + describe(`RouteParamtypes.IP`, () => { + it('should return ip property', () => { + expect( + (factory as any).exchangeKeyForValue(RouteParamtypes.IP, ...args), + ).to.be.equal(req.ip); + }); + }); describe(`RouteParamtypes.SESSION`, () => { it('should return session object', () => { expect(