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
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;
}