@textpress/microrouter

2.3.0Β β€’Β PublicΒ β€’Β Published

πŸš‰ Micro Router - A tiny and functional router for Zeit's micro

GitHub release Build Status Coveralls Codacy Badge XO code style

πŸ‘Œ Β  Features

  • Tiny. Just 23 lines of code.
  • Functional. Write your http methods using functions.
  • Async. Design to use with async/await

πŸ’» Β  Usage

Install as project dependency:

$ yarn add microrouter

Then you can define your routes inside your microservice:

const { send } = require('micro')
const { router, get } = require('microrouter')

const hello = (req, res) =>
  send(res, 200, `Hello ${req.params.who}`)

const notfound = (req, res) =>
  send(res, 404, 'Not found route')

module.exports = router(
  get('/hello/:who', hello),
  get('/*', notfound)
)

async/await

You can use your handler as an async function:

const { send } = require('micro')
const { router, get } = require('microrouter')

const hello = async (req, res) =>
  send(res, 200, await Promise.resolve(`Hello ${req.params.who}`))

module.exports = router(
  get('/hello/:who', hello)
)

route methods

Each route is a single basic http method that you import from microrouter and has the same arguments:

  • get(path = String, handler = Function)
  • post(path = String, handler = Function)
  • put(path = String, handler = Function)
  • patch(path = String, handler = Function)
  • del(path = String, handler = Function)
  • head(path = String, handler = Function)
  • options(path = String, handler = Function)

path

A simple url pattern that you can define your path. In this path you can set your parameters using a : notation. The req parameter from handler will return this parameters as an object.

For more information about how you can define your path, see url-pattern that's the package that we're using to match paths.

handler

The handler method is a simple function that will make some action base on your path. The format of this function is (res, res) => {}

req.params

As you can see below, the req parameter has a property called params that represents the parameters defined in your path:

const { router, get } = require('microrouter')
const request = require('some-request-lib')

// service.js
module.exports = router(
  get('/hello/:who', (req, res) => req.params)
)

// test.js
const response = await request('/hello/World')

console.log(response)  // { who: 'World' }
req.query

The req parameter also has a query property that represents the queries defined in your requision url:

const { router, get } = require('microrouter')
const request = require('some-request-lib')

// service.js
module.exports = router(
  get('/user', (req, res) => req.query)
)

// test.js
const response = await request('/user?id=1')

console.log(response)  // { id: 1 }

Parsing Body

By default, router doens't parse anything from your requisition, it's just match your paths and execute a specific handler. So, if you want to parse your body requisition you can do something like that:

const { router, post } = require('microrouter')
const { json, send } = require('micro')
const request = require('some-request-lib')

// service.js
const user = async (req, res) => {
  const body = await json(req)
  send(res, 200, body)
}

module.exports = router(
  post('/user', user)
)

// test.js
const body = { id: 1 }
const response = await request.post('/user', { body })

πŸ•Ί Β  Contribute

  1. Fork this repository to your own GitHub account and then clone it to your local device
  2. Install dependencies using Yarn: yarn install
  3. Make the necessary changes and ensure that the tests are passing using yarn test
  4. Send a pull request πŸ™Œ

Versions

Current Tags

VersionDownloads (Last 7 Days)Tag
2.3.00latest

Version History

VersionDownloads (Last 7 Days)Published
2.3.00

Package Sidebar

Install

npm i @textpress/microrouter

Weekly Downloads

0

Version

2.3.0

License

MIT

Last publish

Collaborators

  • textpress-ci