An open API service indexing awesome lists of open source software.

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

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

  • Getting Started

  • Roadmap

  • Contributing

  • Run The Tests

  • License

  • Contact
  • ## 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)