:station: Micro Router - A tiny and functional router for ZEIT's micro
๐ ย 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')
module.exports = router(
get('/hello/:who', (req, res) => req.params)
)
const response = await request('/hello/World')
console.log(response)
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')
module.exports = router(
get('/user', (req, res) => req.query)
)
const response = await request('/user?id=1')
console.log(response)
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')
const user = async (req, res) => {
const body = await json(req)
send(res, 200, body)
}
module.exports = router(
post('/user', user)
)
const body = { id: 1 }
const response = await request.post('/user', { body })
๐บ ย Contribute
- Fork this repository to your own GitHub account and then clone it to your local device
- Install dependencies using Yarn:
yarn install
- Make the necessary changes and ensure that the tests are passing using
yarn test
- Send a pull request ๐