in packages/dubbo-node/src/dubbo-node-adapter.ts [65:102]
export function connectNodeAdapter(
options: ConnectNodeAdapterOptions
): NodeHandlerFn {
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 nodeRequestHandler(
req: NodeServerRequest,
res: NodeServerResponse
): void {
// Strip the query parameter when matching paths.
const uHandler = paths.get(req.url?.split("?", 2)[0] ?? "");
if (!uHandler) {
(options.fallback ?? fallback)(req, res);
return;
}
const uReq = universalRequestFromNodeRequest(req, undefined);
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
);
});
};
}