pronounced /eΙͺpekst/
A simple CLI tool to manage and organize Next.js API routes.
Inspired by the Laravel Artisan route:list Command
brew install lifespikes/apext/apext
npm i -g apext
Place yourself on your Next.js root directory and run apext list
--path - optional (will output a specific path routes, /api is default)
apext list --path auth
Display your route accepted http methods by adding the // @methods comment. Check the π― create command below.
// my-route.ts // @methods [GET, POST, PUT, DELETE] // ...rest of the file
Will create an API endpoint following a REST structure.
<name> - required (the name of your API endpoint)
--path - optional (/api folder is default)
--ts - optional (.js file is generated by default)
apext create login --path auth --ts
- When stating a
--pathyou can create nested directories likepath/nested-path. - If a folder does not exists, APEXT will create the folder for you.
import type { NextApiRequest, NextApiResponse } from 'next' // APEXT methods comment π // @methods [GET, POST, PUT, DELETE] export default async function name( req: NextApiRequest, res: NextApiResponse ) { switch (req.method) { case 'GET': case 'POST': case 'PUT': case 'DELETE': default: res.setHeader('Allow', [ 'GET', 'POST', 'PUT', 'DELETE', ]) return res.status(405).end(`Method ${req.method} Not Allowed`) } }
You can add an apext.config.js to your Next.js project root directory.
| option | type | description |
|---|---|---|
| tsContent | function | A function (name: string) => string. Takes one argument name and returns a string. It allows you to set up the content of the API route when just being created with the create command. |
| jsContent | function | A function (name: string) => string . Takes one argument name and returns a string. It allows you to set up the content of the API route when just being created with the create command. |
| typescript | boolean | If you are programming in Typescript you can set up this option and all API routes will be Typescript files without specifying the --ts flag. |
module.exports = { jsContent: (name) => ` export default async function ${name} (req, res) { return res.status(200).json('Hello from Apext Config') } ` }