コンテンツにスキップ

POSTを読む

HTMLフォームを提供し、POSTリクエストを読み取ります。また、受信リクエストからJSONまたはPOSTデータを読み取るためにも使用します。

export default {
async fetch(request) {
/**
* rawHtmlResponseは、ワーカースクリプトに直接入力されたHTMLを返します
* @param {string} html
*/
function rawHtmlResponse(html) {
return new Response(html, {
headers: {
"content-type": "text/html;charset=UTF-8",
},
});
}
/**
* readRequestBodyは、受信リクエストボディを読み取ります
* 非同期関数内でawait readRequestBody(..)を使用して文字列を取得します
* @param {Request} request 読み取る受信リクエスト
*/
async function readRequestBody(request) {
const contentType = request.headers.get("content-type");
if (contentType.includes("application/json")) {
return JSON.stringify(await request.json());
} else if (contentType.includes("application/text")) {
return request.text();
} else if (contentType.includes("text/html")) {
return request.text();
} else if (contentType.includes("form")) {
const formData = await request.formData();
const body = {};
for (const entry of formData.entries()) {
body[entry[0]] = entry[1];
}
return JSON.stringify(body);
} else {
// フォームに他のタイプのデータが送信された可能性があります
// 例えば画像や他のバイナリデータなど。
return "ファイル";
}
}
const { url } = request;
if (url.includes("form")) {
return rawHtmlResponse(someForm);
}
if (request.method === "POST") {
const reqBody = await readRequestBody(request);
const retBody = `送信されたリクエストボディは ${reqBody} です`;
return new Response(retBody);
} else if (request.method === "GET") {
return new Response("リクエストはGETでした");
}
},
};