Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up

🚉 A tiny and functional router for Zeit's Micro

License

NotificationsYou must be signed in to change notification settings

pedronauck/micro-router

Repository files navigation

🚉Micro Router - A tiny and functional router for ZEIT'smicro

GitHub releaseBuild StatusCoverallsCodacy Badge

👌   Features

  • Tiny. Just couple lines of code.
  • Functional. Write your http methods using functions.
  • Async. Design to use withasync/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 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)

path

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.

handler

Thehandler 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, 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' }
req.query

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 }

Parsing Body

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})

UrlPattern instance as path

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"'))

Namespaced Routes

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!

🕺   Contribute

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

[8]ページ先頭

©2009-2025 Movatter.jp