在 cloudflare-worker 服务上解析原始主体(非节点)

Parse raw body on cloudflare-worker service(Non NODE)

我使用 cloudflare-worker 在 cloudflare 上创建了一个 api 服务器环境,但没有节点服务器 运行(cloudflare-worker 几乎是无服务器事件处理程序服务)。它确实提供了处理任何子域调用的配置,就像 api 的工作方式一样。我使用了一个名为 cf-worker-router 的包来执行此操作。 我的云服务如下所示:

import { ApiError, ApiRedirect, DomainRouter, FetchRouter } from 'cf-worker-router';

const router = new FetchRouter();

// add the cloudflare event listener
addEventListener('fetch', (event) => {
  router.onFetch(event);
});

router.route('/users', 'POST', async (event) => {
  // automatically converts anything not of Response type to ApiResponse
  return await event.request.text();
});

我所做的是为 url 创建一个 POST 请求并向该请求提供一些正文。我能够成功获取请求文本,但现在我不知道如何解析我收到的文本。

将请求作为multipart/form-data请求使用时,收到的正文如下:

"----------------------------093590450792211419875705\r\nContent-Disposition: form-data; name=\"name\"\r\n\r\nJon Doe\r\n----------------------------093590450792211419875705--\r\n"

我尝试发送 application/x-www-form-urlencoded 并且我的回复文本是这样的:

"name=Jon%20Doe"

application/json 请求类似:

"{\n\t\"name\": \"Jon Doe\"\n}"

由于cloudflare没有使用nodejs服务器,body-parser这里不能应用。该服务几乎是开放的 api,因此它需要处理各种请求内容类型。有什么方法可以识别这些内容类型中的任何内容类型并将其解码为 javascript 中的有效对象?

要处理表单数据上传,您可以使用 request.formData() method which will return a promise of a FormData 对象。

例如:

addEventListener('fetch', event => {
  event.respondWith(handleRequest(event.request))
})


async function handleRequest(request) {
  const formData = await request.formData();
  const name = formData.get('name');
  return new Response(`Hello ${name}`);
}