Skip to content

Commit 8823c8f

Browse files
feat: add middleware exclude param
now you can exclude several methods from processing by middlewares
1 parent 3da9e26 commit 8823c8f

File tree

3 files changed

+26
-3
lines changed

3 files changed

+26
-3
lines changed

__tests__/services/abstract-microservice-test.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ describe('services/abstract-microservice', () => {
2323

2424
// For test middlewares
2525
const endpointTriggerMiddleware = 'middleware-endpoint';
26+
const endpointExcludeMiddleware = 'middleware-endpoint-exclude';
2627
const middlewareHandlerBefore: MiddlewareHandler = ({ task }) =>
2728
(task.getMethod() === endpointTriggerMiddleware && {
2829
...task.getParams(),
@@ -37,6 +38,7 @@ describe('services/abstract-microservice', () => {
3738
ms.addMiddleware(middlewareHandlerBefore);
3839
ms.addMiddleware(middlewareHandlerAfter, MiddlewareType.response, {
3940
match: `${endpointTriggerMiddleware}*`,
41+
exclude: [endpointExcludeMiddleware],
4042
});
4143

4244
/**
@@ -268,6 +270,24 @@ describe('services/abstract-microservice', () => {
268270
expect(handler.firstCall.firstArg).to.deep.equal({ ...req.getParams(), middleware: 'before' });
269271
});
270272

273+
it('should correctly start worker & return success response without after middleware', async () => {
274+
const result = { success: true };
275+
const req = new MicroserviceRequest({
276+
id: 2,
277+
method: endpointExcludeMiddleware,
278+
params: { hello: 1 },
279+
});
280+
const handler = sinon.spy(() => result);
281+
282+
ms.addEndpoint(endpointExcludeMiddleware, handler);
283+
284+
const stubbed = await createAxiosMock(req.toJSON());
285+
const secondCall = stubbed.getCall(1).firstArg;
286+
287+
expect(secondCall.data.getResult()).to.deep.equal({ ...result });
288+
expect(handler.firstCall.firstArg).to.deep.equal({ ...req.getParams() });
289+
});
290+
271291
it('should correctly start worker & return endpoint exception', async () => {
272292
const method = 'need-exception';
273293
const req = new MicroserviceRequest({ id: 2, method });

src/interfaces/services/i-abstract-microservice.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ interface IMiddlewares {
6060

6161
interface IMiddlewareParams {
6262
match: string;
63+
exclude: string[];
6364
}
6465

6566
interface IEndpointOptions {

src/services/abstract-microservice.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,7 @@ abstract class AbstractMicroservice {
196196
type: MiddlewareType = MiddlewareType.request,
197197
params: Partial<IMiddlewareParams> = {},
198198
): AbstractMicroservice {
199-
this.middlewares[type].push({ handler, params: { match: '*', ...params } });
199+
this.middlewares[type].push({ handler, params: { match: '*', exclude: [], ...params } });
200200

201201
return this;
202202
}
@@ -232,9 +232,11 @@ abstract class AbstractMicroservice {
232232

233233
for (const {
234234
handler,
235-
params: { match },
235+
params: { match, exclude },
236236
} of this.middlewares[type]) {
237-
const shouldSkip = !data.task.getMethod().startsWith(match.replace('*', ''));
237+
const shouldSkip =
238+
!data.task.getMethod().startsWith(match.replace('*', '')) ||
239+
exclude.includes(data.task.getMethod());
238240

239241
handledParams = (!shouldSkip && (await handler(data, request))) || handledParams;
240242
}

0 commit comments

Comments
 (0)