Skip to content

Instantly share code, notes, and snippets.

@AndrewIngram
Created January 18, 2022 22:26
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save AndrewIngram/54f547cd85a6fe23acd6698e825ca5f0 to your computer and use it in GitHub Desktop.
Save AndrewIngram/54f547cd85a6fe23acd6698e825ca5f0 to your computer and use it in GitHub Desktop.
Request/Response form handling with Next.js
import formidable from "formidable";
export default function formData(request) {
const form = formidable({ multiples: true });
return new Promise((resolve, reject) => {
form.parse(request, (err, fields, files) => {
if (err) {
reject(err);
return;
}
resolve({ data: fields, files });
return;
});
});
}
import formData from "../formData";
export async function getServerSideProps({ req }) {
const { data } =
req.method === "POST" ? await formData(req) : { data: {}, errors: {} };
return {
props: {
form: {
data,
},
},
};
}
export default function Home({ form }) {
return (
<main style={{ margin: "40px auto", maxWidth: "500px" }}>
<h1>Next.js form</h1>
{form.data.name ? <>Hello {form.data.name}</> : null}
<form action="." method="post">
<label>
What&apos;s your name:
<input name="name" required autoComplete="off" />
</label>
<button>Submit</button>
</form>
</main>
);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment