in packages/dubbo-express/src/express-dubbo-middleware.ts [56:93]
export function expressConnectMiddleware(
options: ExpressConnectMiddlewareOptions
): express.Handler {
if (options.acceptCompression === undefined) {
options.acceptCompression = [compressionGzip, compressionBrotli];
}
const router = createConnectRouter(options);
options.routes(router);
const prefix = options.requestPathPrefix ?? "";
const paths = new Map<string, UniversalHandler>();
for (const uHandler of router.handlers) {
paths.set(prefix + uHandler.requestPath, uHandler);
}
return function handler(
req: express.Request,
res: express.Response,
next: express.NextFunction
) {
// Strip the query parameter when matching paths.
const uHandler = paths.get(req.url.split("?", 2)[0]);
if (!uHandler) {
return next();
}
const uReq = universalRequestFromNodeRequest(req, getPreparsedBody(req));
uHandler(uReq)
.then((uRes) => universalResponseToNodeResponse(uRes, res))
.catch((reason) => {
if (ConnectError.from(reason).code == Code.Aborted) {
return;
}
// eslint-disable-next-line no-console
console.error(
`handler for rpc ${uHandler.method.name} of ${uHandler.service.typeName} failed`,
reason
);
});
};
}