Checkpoint: v4.0 media service, compose deploy, and verified docs

这个提交包含在:
cryptocommuniums-afk
2026-03-14 21:45:31 +08:00
父节点 27083d5af9
当前提交 d5431aee0e
修改 41 个文件,包含 4056 行新增883 行删除

56
server/_core/mediaProxy.ts 普通文件
查看文件

@@ -0,0 +1,56 @@
import type { Express, RequestHandler } from "express";
import http from "node:http";
import https from "node:https";
function createMediaProxy(targetUrl: string): RequestHandler {
const target = new URL(targetUrl);
const transport = target.protocol === "https:" ? https : http;
return (req, res) => {
const upstreamUrl = new URL(req.originalUrl, target);
const proxyRequest = transport.request(
upstreamUrl,
{
method: req.method,
headers: {
...req.headers,
host: target.host,
connection: "keep-alive",
},
},
(proxyResponse) => {
if (proxyResponse.statusCode) {
res.status(proxyResponse.statusCode);
}
Object.entries(proxyResponse.headers).forEach(([key, value]) => {
if (value !== undefined) {
res.setHeader(key, value);
}
});
proxyResponse.pipe(res);
}
);
proxyRequest.on("error", (error) => {
if (!res.headersSent) {
res.status(502).json({
error: "media_service_unavailable",
message: error.message,
});
} else {
res.end();
}
});
req.pipe(proxyRequest);
};
}
export function registerMediaProxy(app: Express) {
const mediaServiceUrl = process.env.MEDIA_SERVICE_URL;
if (!mediaServiceUrl) {
return;
}
app.use("/media", createMediaProxy(mediaServiceUrl));
}