https://github.com/teaguestockwell/next-api-mw
Compose middleware for Next.js API routes like React Hooks
https://github.com/teaguestockwell/next-api-mw
nextjs npm typescript
Last synced: about 2 months ago
JSON representation
Compose middleware for Next.js API routes like React Hooks
- Host: GitHub
- URL: https://github.com/teaguestockwell/next-api-mw
- Owner: teaguestockwell
- License: mit
- Created: 2021-11-12T06:20:13.000Z (over 3 years ago)
- Default Branch: master
- Last Pushed: 2022-06-07T02:31:14.000Z (almost 3 years ago)
- Last Synced: 2024-04-24T21:00:48.462Z (about 1 year ago)
- Topics: nextjs, npm, typescript
- Language: TypeScript
- Homepage:
- Size: 447 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
[![license-shield]][license-url] [![linkedin-shield]][linkedin-url] ![size-url] ![size-url2] [![npm-v]][npm-url] [![gh-shield]][gh-url]
[license-shield]: https://img.shields.io/github/license/teaguestockwell/next-api-mw.svg
[license-url]: https://github.com/teaguestockwell/next-api-mw/blob/master/LICENSE
[linkedin-shield]: https://img.shields.io/badge/-LinkedIn-black.svg?logo=linkedin&colorB=555
[linkedin-url]: https://www.linkedin.com/in/teague-stockwell/
[size-url]: https://img.shields.io/bundlephobia/minzip/next-api-mw
[size-url2]: https://img.shields.io/bundlephobia/min/next-api-mw
[npm-v]: https://img.shields.io/npm/v/next-api-mw
[npm-url]: https://www.npmjs.com/package/next-api-mw
[gh-shield]: https://img.shields.io/badge/-GitHub-black.svg?logo=github&colorB=555
[gh-url]: https://github.com/teaguestockwell/next-api-mw
next-api-mw
Compose middleware for Next.js API routes like React Hooks
Table of Contents
## About The Project
Consuming API middleware should be as easy as using hooks in React. When using next-api-mw you can abstract common logic like auth or verifying query params into a middleware that can be used inside of an API route.
When calling middleware inside your route, that middleware may either return a promise, or handle the request itself thereby stopping the rest of the handler and or middleware from running.
## Getting Started
```sh
npm i next-api-mw
```
```typescript
import { HandlerFactory, createMiddleware } from 'next-api-mw'
// create one handler factory, then export it so you can create handlers for all your routes
export const handlerFactory = new HandlerFactory({
handleError: async ({req,res,e}) => {
res.status(500).json({ msg: 'server error' })
},
logger: async ({req,res,e}) => {
},
rootMiddleware: async ({req, res, end}) => {
if(req.url.includes('token')){
res.status(200).json({msg: 'token-accepted'})
end()
}
}
})
// middleware can be consumed in as many routes as you want
// you can even use one middleware inside of another
const usingFooQS = createMiddleware(async ({req, res, end}) => {
const { foo } = req.query
if (!foo || typeof foo !== 'string') {
res.status(400).json({ msg: 'invalid foo' })
// the res will be sent and the remainder of this handler and the next middleware will not be evaluated
end()
}
return foo as string
})
// default export a handler in any file under page/api
export default handlerFactory.getHandler(async ({req, res, end}) => {
// you may consume middleware inside of get handler
const foo = await usingFooQS({req, res})
res.status(200).json({ foo })
end()
})
```
## Roadmap
See the [open issues](https://github.com/teaguestockwell/next-api-mw/issues) for a list of proposed features (and known issues).
## Contributing
I'm open to all community contributions! If you'd like to contribute in any way
## Run The Tests
Tests are E2E with Cypress. To get started run these commands:
```sh
npm i
```
```sh
npm run dev
```
```sh
npm run test
```
## License
Distributed under the MIT License. See `LICENSE` for more information.
## Contact
Teague Stockwell - [LinkedIn](https://www.linkedin.com/in/teague-stockwell)