JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 28
  • Score
    100M100P100Q40716F
  • License MIT

Minimalistc, zero dependencies and configurable Next.js API handler with hook support that avoids pointless boilerplate

Package Exports

  • nxa

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (nxa) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

NxA

NxA

Minimalistc, zero dependencies and configurable Next.js API handler with hook support that avoids pointless boilerplate 🦄

This projects was used in my project before Next.js 12 added support for middlewares, I'll leave this here just for fun now 😂

About

The purpose of this package is to help me prototype faster without wasting time writing countless boilerplate for Next.js api handlers.

Comes with support for hooks (beforeResponse, afterResponse, onError) to help you validate, check authentication and whatever you need.

You can also use conventience method to have a single file handling multiple http methods thus allowing you to write RESTful routes easily.

Installation

npm i nxa

Usage

// pages/api/users/index.js
const nxa = require("nxa");

export default nxa({
  // if handler method found it will be used for every request
  handler: (req, res) => res.end("OK"),

  // if {get,post,put,patch,delete} named method found it will be routed here
  get(req, res) {
    return res.json({ ok: 1 })
    
  },

  put(req, res) {
    // convenience use res.json under the hood and sets content-type to json
    return { ok: 1 }
  },
  
  // catch-all errors in your handlers
  onError(req,res,error) {
    // handler error and return
    return { message: "youwhatbro" }
  },

  // Executed serially in order
  beforeResponse: [
    validate,
    checkJwt,
    (req, res) =>{
    // exit before method handlers or just return empty to follow
    return "OK"
    
  }],

  // Fires when res emits "finish" event
  afterResponse: (req, res) => {
    // send some metrics?
  }
})

If you don't want nxa to route methods to named functions you can use a generic handler and check method on your own

// pages/api/users/index.js
const nxa = require("nxa");
export default nxa({
  handler(req, res) {
    if (req.method === 'GET') // Do what you need
  }
})

Options

nxa(options): AsyncFunction

field description
handler Universal handler for all request on the file
{head,get,post,put,patch,delete} Convenience method to route http methods
beforeResponse Array of functions to execute before handling response
afterResponse function to execute on response finish
onError function called when there is an error in an handler

Contributing

Project is pretty simple and straight forward for what is my needs, but if you have any idea you're welcome.

This projects uses commitizen so be sure to use standard commit format or PR won't be accepted

  1. Fork the Project
  2. Create your Feature Branch (git checkout -b feature/AmazingFeature)
  3. Commit your Changes (git commit -m 'feat(scope): some AmazingFeature')
  4. Push to the Branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

License

Distributed under the MIT License. See LICENSE for more information.

Contact

Simone Corsi - @im_simonecorsi