Skip to content

Instantly share code, notes, and snippets.

@cjfswd
Created May 31, 2022 03:05
Show Gist options
  • Save cjfswd/7ec5bf875ddda78de13bb544d002bbe5 to your computer and use it in GitHub Desktop.
Save cjfswd/7ec5bf875ddda78de13bb544d002bbe5 to your computer and use it in GitHub Desktop.
next.js parse http endpoint dynamically
import type { NextApiRequest, NextApiResponse } from "next";
export default async function handler(
req: NextApiRequest,
res: NextApiResponse
) {
const { slug } = req.query;
type HTTP_METHOD =
| "GET"
| "HEAD"
| "POST"
| "PUT"
| "DELETE"
| "CONNECT"
| "OPTIONS"
| "TRACE"
| "PATCH";
const setHeaderAndSendMessage = (
header: { name: string; value: Array<HTTP_METHOD> },
message: { statusCode: number; method: HTTP_METHOD }
) => {
res.setHeader(header.name, header.value);
res
.status(message.statusCode)
.send(`${message.method} Method Not Allowed.`);
};
if (slug == null) {
switch (req.method) {
case "GET":
res.status(200).send(`All resources getted with success.`);
break;
case "POST":
res.status(201).send(`Resource created with success.`);
break;
default:
setHeaderAndSendMessage(
{ name: "Allow", value: ["GET", "POST"] },
{ statusCode: 405, method: req.method as HTTP_METHOD }
);
break;
}
}
if (slug && slug!.length === 1) {
const id = Number(slug[0]);
switch (req.method) {
case "GET":
res.status(200).send(`Resource { Id: ${id} } getted with success.`);
break;
case "PUT":
res.status(200).send(`Resource { Id: ${id} } updated with success.`);
break;
case "DELETE":
res.status(200).send(`Resource { Id: ${id} } deleted with success.`);
break;
default:
setHeaderAndSendMessage(
{ name: "Allow", value: ["GET", "PUT", "DELETE"] },
{ statusCode: 405, method: req.method as HTTP_METHOD }
);
break;
}
}
if(slug && slug.length > 1){
res.status(400).send(`Bad Request.`);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment