next-api-router
TypeScript icon, indicating that this package has built-in type declarations

1.0.4 • Public • Published

Next API Router

npm npm Node.js Version

Simple and intuitive configuration of Next.js' api routing.

Installation

$ npm install next-api-router

Running tests

$ npm test

Quick start

JavaScript

// /pages/api/[...slug].js (or /src/pages/api/[...slug].js)
import NextApiRouter from 'next-api-router'
 
export default (req, res) => {
  const Router = new NextApiRouter(req, res)
 
  Router.get('/test', (req, res) => {
    res.status(200).send(true)
  })
 
  return Router.routes()
}

TypeScript

// /pages/api/[...slug].ts (or /src/pages/api/[...slug].ts)
import { NextApiRequest, NextApiResponse } from 'next'
import NextApiRouter from 'next-api-router'
 
export default (req: NextApiRequest, res: NextApiResponse) => {
  const Router = new NextApiRouter(req, res)
 
  Router.get('/test', (req, res) => {
    res.status(200).send(true)
  })
 
  return Router.routes()
}

Possible HTTP methods

NextApiRouter.post(), NextApiRouter.get(), NextApiRouter.put(), NextApiRouter.delete()

Example

Client

import React, { useEffect } from 'react'
 
const App = () => {
 
  useEffect(() => {
 
    // First request
    fetch('/api/apiUrlPath?apple=hello')
 
    // Second request
    fetch('/api/apiUrlPath/world')
 
    // Third request
    fetch('/api/apiUrlPath', {
      method: 'post',
      body: JSON.stringify({
        banana: 'long'
      })
    })
 
  }, [])
 
  return (
    <div>hello world</div>
  )
}
 
export default App

Server

// /pages/api/[...slug].js (or /src/pages/api/[...slug].js)
import NextApiRouter from 'next-api-router'
 
export default (req, res) => {
  const Router = new NextApiRouter(req, res)
 
  Router
    // First response processing
    .get('/apiUrlPath', (req, res) => {
      const { apple } = req.query
 
      console.log(apple)
      // hello
 
      res.status(200).send(true)
    })
 
    // Second response processing
    .get('/apiUrlPath/:orange', (req, res) => {
      const { orange } = req.query
 
      console.log(orange)
      // world
 
      res.status(200).send(true)
    })
 
    // Third response processing
    .post('/apiUrlPath', (req, res) => {
      const { banana } = JSON.parse(req.body)
 
      console.log(banana)
      // long
 
      res.status(200).send(true)
    })
 
  return Router.routes()
}

Other

  • The first /api path can be omitted
// /pages/api/[...slug].js (or /src/pages/api/[...slug].js)
...
 
  const Router = new NextApiRouter(req, res)
 
  Router.get('/api/apiUrlPath', (req, res) => { ... })
 
...
// /pages/api/[...slug].js (or /src/pages/api/[...slug].js)
...
 
  const Router = new NextApiRouter(req, res)
 
  Router.get('/apiUrlPath', (req, res) => { ... })
 
...

These two are the same

  • 'slug' cannot be used as a key for query string.
// /pages/api/[...slug].js (or /src/pages/api/[...slug].js)
...
 
  const Router = new NextApiRouter(req, res)
 
  Router.get('/api/apiUrlPath/:slug', (req, res) => { ... })
  // error
...

Readme

Keywords

Package Sidebar

Install

npm i next-api-router

Weekly Downloads

3

Version

1.0.4

License

MIT

Unpacked Size

21.1 kB

Total Files

12

Last publish

Collaborators

  • falsylab