moleculerjs / moleculer

:rocket: Progressive microservices framework for Node.js
https://moleculer.services/
MIT License
6.17k stars 587 forks source link

Add hook middlewares interceptors to preserve call context with call middlewares. #1270

Closed DonVietnam closed 9 months ago

DonVietnam commented 10 months ago

:memo: Description

When using middleware for the call method, the call context was lost, as described in #1241 . This issue occurred because the context was passed through the mutation of the promise. Consequently, if the middleware awaited the result from the promise and returned a new promise, the execution context was lost.

In order to maintain backward compatibility, I propose the following solution: We can wrap the middleware for specific hooks, such as call, in an interceptor function. The interceptor is responsible for setting the context value for the promise that will be returned from the user's middleware.

In this pull request, I have added interceptor functionality to the MiddlewareHandler class, as well as an interceptor method for the call hook in the ServiceBroker class.

:dart: Relevant issues

1241

:gem: Type of change

:vertical_traffic_light: How Has This Been Tested?

Please describe the tests that you ran to verify your changes. Provide instructions so we can reproduce. Please also list any relevant details for your test configuration

:checkered_flag: Checklist:

icebob commented 9 months ago

Nice solution, thanks!