- Notifications
You must be signed in to change notification settings - Fork34
🚉 A tiny and functional router for Zeit's Micro
License
pedronauck/micro-router
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
🚉Micro Router - A tiny and functional router for ZEIT'smicro
- Tiny. Just couple lines of code.
- Functional. Write your http methods using functions.
- Async. Design to use with
async/await
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))
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))
Each route is a single basic http method that you import frommicrorouter
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)
A simple url pattern that you can define your path. In this path, you can set your parameters using a:
notation. Thereq
parameter fromhandler
will return these parameters as an object.
For more information about how you can define your path, seeurl-pattern that's the package that we're using to match paths.
Thehandler
method is a simple function that will make some action base on your path.The format of this function is(req, res) => {}
As you can see below, thereq
parameter has a property calledparams
that represents the parameters defined in yourpath
:
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' }
Thereq
parameter also has aquery
property that represents thequeries
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 }
By default, routerdoesn'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})
The packageurl-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 ofUrlPattern
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"'))
If you want to create nested routes, you can define a namespace for your routes using thewithNamespace
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!
About
🚉 A tiny and functional router for Zeit's Micro
Topics
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Packages0
Uh oh!
There was an error while loading.Please reload this page.