Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
58 changes: 44 additions & 14 deletions src/deno_index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -67,23 +67,53 @@ async function handleWebSocket(req: Request): Promise<Response> {
return response;
}

// 这是您的 DENO 入口文件的修正函数
async function handleAPIRequest(req: Request): Promise<Response> {
try {
const worker = await import('./api_proxy/worker.mjs');
return await worker.default.fetch(req);
} catch (error) {
console.error('API request error:', error);
const errorMessage = error instanceof Error ? error.message : 'Unknown error occurred';
const errorStatus = (error as { status?: number }).status || 500;
return new Response(errorMessage, {
status: errorStatus,
headers: {
'content-type': 'text/plain;charset=UTF-8',
// 1. 创建一个“管道”(TransformStream)。
const stream = new TransformStream();

// 2. 在后台启动 worker,不使用 `await`。
(async () => {
try {
// 导入 worker 模块。
const worker = await import('./api_proxy/worker.mjs');

// 从 worker 获取响应。此响应的 body 是一个流。
const workerResponse = await worker.default.fetch(req);

// 检查 worker 是否提供了流式 body。
if (workerResponse.body) {
// 这是关键:将 worker 响应中的流直接连接到
// 我们连接到用户的管道。
await workerResponse.body.pipeTo(stream.writable);
} else {
// 如果没有 body,只需关闭我们的管道。
await stream.writable.close();
}
});
}

} catch (error) {
console.error('API request background task error:', error);
// 如果 worker 失败,中止管道。
await stream.writable.abort(error);
}
})();

// 3. 立即返回一个新的 Response。
// 此响应的 body 是我们管道的“可读”端。
// Cloudflare 立即收到此响应,从而防止 524 超时。
return new Response(stream.readable, {
// 理想情况下,我们应该传递原始头信息,但这些是安全的默认值。
status: 200,
headers: {
"Access-Control-Allow-Origin": "*",
"Content-Type": "text/event-stream; charset=utf-8",
"Cache-Control": "no-cache",
"Connection": "keep-alive",
}
});
}


async function handleRequest(req: Request): Promise<Response> {
const url = new URL(req.url);
console.log('Request URL:', req.url);
Expand Down Expand Up @@ -127,4 +157,4 @@ async function handleRequest(req: Request): Promise<Response> {
}
}

Deno.serve(handleRequest);
Deno.serve(handleRequest);
Loading