How to Guides

Handling FormData

Zuplo supports working with FormData including multipart/form-data. In this simple example we show how you can parse a multipart entry and read the stream into memory for use in the Zuplo runtime.

In this case, we upload a JSON file as a multipart/form-data entry using Insomnia, with a key foo

Insomnia multipart/form-data

We can then handle this programmatically inside Zuplo using a function handler. We also modify the JSON before forwarding on to the target backend server.

import { ZuploContext, ZuploRequest } from "@zuplo/runtime"; // FormData can return different types in different circumstances // use this function to convert both to strings async function readFileOrStringContent(data: unknown) { if (data.constructor.name === "File") { return await (data as File).text(); } return data as string; } export default async function (request: ZuploRequest, context: ZuploContext) { const formData = await request.formData(); // read the form-data entry as a 'Blob' type const blob = formData.get("foo"); // stream the body into memory const json = await readFileOrStringContent(blob); // parse the JSON document const object = JSON.parse(json); // Modify the document somehow before forwarding on to the backend object.newKey = "newValue"; // Make a standard POST to a backend with a JSON body const response = fetch("https://backend-origin.com/example", { method: "POST", headers: { "content-type": "application/json", }, body: JSON.stringify(object, null, 2), }); return response; }
Previous
Lazy Load Configuration