diff --git a/package.json b/package.json index eebd071..4e5d7db 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "$schema": "https://json.schemastore.org/package", "name": "@kevisual/router", - "version": "0.0.47", + "version": "0.0.48", "description": "", "type": "module", "main": "./dist/router.js", diff --git a/src/server/server-bun.ts b/src/server/server-bun.ts index f37f266..cfe4954 100644 --- a/src/server/server-bun.ts +++ b/src/server/server-bun.ts @@ -71,7 +71,7 @@ export class BunServer extends ServerBase implements ServerType { } // 将 Bun 的 Request 转换为 Node.js 风格的 req/res - return new Promise((resolve) => { + return new Promise(async (resolve) => { const req: RouterReq = { url: url.pathname + url.search, method: request.method, @@ -80,6 +80,11 @@ export class BunServer extends ServerBase implements ServerType { // @ts-ignore remoteAddress: request?.remoteAddress || request?.ip || clientInfo?.address || '', remotePort: clientInfo?.port || 0, + }, + // @ts-ignore + bun: { + request, // 原始请求对象 + server, // 原始服务器对象 } }; @@ -212,10 +217,25 @@ export class BunServer extends ServerBase implements ServerType { }; // 处理请求体 if (request.method !== 'GET' && request.method !== 'HEAD') { - request.text().then((body) => { - (req as any).body = body; + const contentType = request.headers.get('content-type') || ''; + if (contentType.includes('application/json')) { + const text = await request.text(); + req.body = text; requestCallback(req, res); - }); + return; + } else if (contentType.includes('application/x-www-form-urlencoded')) { + const formData = await request.formData(); + const body: Record = {}; + for (const [key, value] of formData.entries()) { + body[key] = value; + } + req.body = JSON.stringify(body); + requestCallback(req, res); + return; + } else { + requestCallback(req, res); + return; + } } else { requestCallback(req, res); } diff --git a/src/server/server-type.ts b/src/server/server-type.ts index a6b23a3..d700115 100644 --- a/src/server/server-type.ts +++ b/src/server/server-type.ts @@ -91,6 +91,7 @@ export type RouterReq = { remoteAddress?: string; remotePort?: number; }; + body?: string; cookies?: Record; } & T;