リクエストプロパティの修正
受信リクエストに基づいて編集されたプロパティを持つ修正リクエストを作成します。
export default { async fetch(request) { /** * 例 someHost は生の JSON を返すように設定されています * @param {string} someUrl リクエストを送信する URL、ホスト名も設定しているため、パスのみが適用されます * @param {string} someHost リクエストが解決されるホスト */ const someHost = "example.com"; const someUrl = "https://foo.example.com/api.js";
/** * 最良のプラクティスは、リクエストオブジェクトに新しい RequestInit プロパティを * メソッドまたはコンストラクタを使用してのみ割り当てることです */ const newRequestInit = { // メソッドを変更 method: "POST", // ボディを変更 body: JSON.stringify({ bar: "foo" }), // リダイレクトモードを変更 redirect: "follow", // ヘッダーを変更、注意:このメソッドは既存のヘッダーを消去します headers: { "Content-Type": "application/json", }, // アウトバウンドレスポンスの Cloudflare 機能を変更 cf: { apps: false }, };
// ホストのみを変更 const url = new URL(someUrl);
url.hostname = someHost;
// 最良のプラクティスは、常に元のリクエストを使用して新しいリクエストを構築し // すべての属性をクローンすることです。URLを適用するにはコンストラクタも必要です // 一度リクエストが構築されると、その URL は不変です。 const newRequest = new Request( url.toString(), new Request(request, newRequestInit), );
// メソッドを使用してヘッダーを設定 newRequest.headers.set("X-Example", "bar"); newRequest.headers.set("Content-Type", "application/json"); try { return await fetch(newRequest); } catch (e) { return new Response(JSON.stringify({ error: e.message }), { status: 500, }); } },};export default { async fetch(request): Promise<Response> { /** * 例 someHost は生の JSON を返すように設定されています * @param {string} someUrl リクエストを送信する URL、ホスト名も設定しているため、パスのみが適用されます * @param {string} someHost リクエストが解決されるホスト */ const someHost = "example.com"; const someUrl = "https://foo.example.com/api.js";
/** * 最良のプラクティスは、リクエストオブジェクトに新しい RequestInit プロパティを * メソッドまたはコンストラクタを使用してのみ割り当てることです */ const newRequestInit = { // メソッドを変更 method: "POST", // ボディを変更 body: JSON.stringify({ bar: "foo" }), // リダイレクトモードを変更 redirect: "follow", // ヘッダーを変更、注意:このメソッドは既存のヘッダーを消去します headers: { "Content-Type": "application/json", }, // アウトバウンドレスポンスの Cloudflare 機能を変更 cf: { apps: false }, };
// ホストのみを変更 const url = new URL(someUrl);
url.hostname = someHost;
// 最良のプラクティスは、常に元のリクエストを使用して新しいリクエストを構築し // すべての属性をクローンすることです。URLを適用するにはコンストラクタも必要です // 一度リクエストが構築されると、その URL は不変です。 const newRequest = new Request( url.toString(), new Request(request, newRequestInit), );
// メソッドを使用してヘッダーを設定 newRequest.headers.set("X-Example", "bar"); newRequest.headers.set("Content-Type", "application/json"); try { return await fetch(newRequest); } catch (e) { return new Response(JSON.stringify({ error: e.message }), { status: 500, }); } },} satisfies ExportedHandler;import jsonfrom pyodide.ffi import to_js as _to_jsfrom js import Object, URL, Request, fetch, Response
def to_js(obj): return _to_js(obj, dict_converter=Object.fromEntries)
async def on_fetch(request): some_host = "example.com" some_url = "https://foo.example.com/api.js"
# 最良のプラクティスは、new_request_init プロパティを # リクエストオブジェクトにメソッドまたはコンストラクタを使用してのみ割り当てることです new_request_init = { "method": "POST", # メソッドを変更 "body": json.dumps({ "bar": "foo" }), # ボディを変更 "redirect": "follow", # リダイレクトモードを変更 # ヘッダーを変更、注意:このメソッドは既存のヘッダーを消去します "headers": { "Content-Type": "application/json", }, # アウトバウンドレスポンスの Cloudflare 機能を変更 "cf": { "apps": False }, }
# ホストのみを変更 url = URL.new(some_url) url.hostname = some_host
# 最良のプラクティスは、常に元のリクエストを使用して新しいリクエストを構築し # すべての属性をクローンすることです。URLを適用するにはコンストラクタも必要です # 一度リクエストが構築されると、その URL は不変です。 org_request = Request.new(request, new_request_init) new_request = Request.new(url.toString(),org_request)
new_request.headers["X-Example"] = "bar" new_request.headers["Content-Type"] = "application/json"
try: return await fetch(new_request) except Exception as e: return Response.new({"error": str(e)}, status=500)