You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
๐ Micro Router - A tiny and functional router for ZEIT's micro
๐ ย Features
Tiny. Just couple 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')consthello=(req,res)=>send(res,200,`Hello ${req.params.who}`)constnotfound=(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')consthello=async(req,res)=>send(res,200,awaitPromise.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 these 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 (req, 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')constrequest=require('some-request-lib')// service.jsmodule.exports=router(get('/hello/:who',(req,res)=>req.params))// test.jsconstresponse=awaitrequest('/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')constrequest=require('some-request-lib')// service.jsmodule.exports=router(get('/user',(req,res)=>req.query))// test.jsconstresponse=awaitrequest('/user?id=1')console.log(response)// { id: 1 }
Parsing Body
By default, router doesn'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')constrequest=require('some-request-lib')// service.jsconstuser=async(req,res)=>{constbody=awaitjson(req)send(res,200,body)}module.exports=router(post('/user',user))// test.jsconstbody={id: 1}constresponse=awaitrequest.post('/user',{ body })
UrlPattern instance as path
The package url-pattern has a lot of options inside it to match url. If you have a different need for some of your paths, like a make pattern from a regexp, you can pass an instance of UrlPattern as the path parameter:
constUrlPattern=require('url-pattern')const{ router, get }=require('microrouter')constroutes=router(get(newUrlPattern(/^\api/),()=>'This will match all routes that start with "api"'))
Namespaced Routes
If you want to create nested routes, you can define a namespace for your routes using the withNamespace high order function:
const{ withNamespace, router, get }=require('microrouter')const{ json, send }=require('micro')constoldApi=withNamespace('/api/v1')constnewApi=withNamespace('/api/v2')constroutes=router(oldApi(get('/',()=>'My legacy api route')),newApi(get('/',()=>'My new api route')))
PS: The nested routes doesn't work if you pass a UrlPattern instance as path argument!
๐บ ย 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 ๐
About
๐ A tiny and functional router for Zeit's Micro