2

我已经使用 cloudflare-worker 在 cloudflare 上创建了一个 api server'ish 环境,并且没有运行节点服务器(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\n内容配置:表单数据;name=\"name\"\r \n\r\nJon Doe\r\n----------------------------093590450792211419875705--\r\n"

我尝试发送application/x-www-form-urlencoded并且我的响应文本如下:

“名字=乔恩%20Doe”

和类似的application/json请求:

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

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

4

1 回答 1

2

要处理表单数据上传,您可以使用request.formData()方法,该方法将返回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}`);
}
于 2019-12-18T23:36:53.520 回答