Code Monkey home page Code Monkey logo

koa-mount-routes's Introduction

koa-mount-routes

Build Status Coverage Status

NPM

A koa package to load routes automatically from file system.

Why?

Usage

After yarn add koa-mount-routes or npm install koa-mount-routes --save:

const path = require('path');
const Koa = require('koa');
const mountRoutes = require('koa-mount-routes');

const app = new Koa();
mountRoutes(app, path.join(__dirname, 'controllers'), {
  urlPrefix: '/api/v1/'
});

app.listen(3000, () => {
  console.log('Example app listening on port 3000!');
});

API Doc

mountRoutes(
  app, // A Koa2 instance;
  dirPath, // *absolute* path to the controllers dir
  {
    // optional parameters, and the 3rd param for this function is not required
    ignore, // files you want to ignore while scanning controllers dir such as index.js, see parameter options of module glob(https://github.com/isaacs/node-glob#options) for more infomation. Default value: ''
    urlPrefix, // prefix for routes, such as /api/v1/. Default value: '/'
    autoPlural, // whether apply pluralized file name as part of routes automatically. Default value: true
    allowedMethods // it is for koa-router, see https://github.com/alexmingoia/koa-router#routerallowedmethodsoptions--function for more information. As here, you can assign it to `[options]` parameter of koa-router#router.allowedMethods such as `{ throw: true }`. Default value: null, that's to say, we do not execute `app.use(router.allowedMethods());` by default.
  }
);

How to write Controllers

You must export an object whose keys are last part of routes and values are objects (or array) with HTTP method and handlers. For example:

// FileName: controllers/weibo.js

module.exports = {
  // when value is a function or an array of functions, the HTTP method would be default value GET
  '/': async ctx => {
    ctx.body = 'Weibos Index';
  },
  // also you can provide one more handlers with an array of functions: these handlers except last one are called middlerwares in Koa
  '/getArr': [
    async ctx => {
      ctx.body = 'GET for one more handlers';
    }
  ],
  // also you can make URL params
  '/:id': {
    // explicitly identifing an HTTP method can never be wrong
    get: ctx => {
      ctx.body = `get weibo: ${ctx.params.id}`;
    },
    post: async ctx => {
      ctx.body = `post weibo: ${ctx.params.id}`;
    }
  },
  // another example for usage of middlerwares
  '/temp': {
    delete: [
      async (ctx, next) => {
        ctx.myOwnVar = 'this is a middleware.';
        await next();
      },
      async ctx => {
        ctx.body = `${ctx.myOwnVar}ordinary api`;
      }
    ]
  }
};

At last, routes would be combined with ${urlPrefix} + ${pluralized file name of controllers} + ${identified keys}. Therefore, examples above would mount these routes:

GET - /api/v1/weibos/
GET - /api/v1/weibos/getArr
GET - /api/v1/weibos/:id
POST - /api/v1/weibos/:id
DELETE - /api/v1/weibos/temp

You are welcomed to review test.js and controllers dir in this project for more information of usage.

Attention

  1. As Koa does not provide a router by default, we pick koa-router as the router.

  2. You can use DEBUG=koa-mount-routes to get to know what routes are mounted.

Relatives

LICENSE

MIT

koa-mount-routes's People

Contributors

dependabot[bot] avatar maples7 avatar

Watchers

 avatar  avatar  avatar

koa-mount-routes's Issues

同学,您这个项目引入了440个开源组件,存在6个漏洞,辛苦升级一下

检测到 Maples7/koa-mount-routes 一共引入了440个开源组件,存在6个漏洞

漏洞标题:Joyent trim-newlines存在未明漏洞
缺陷组件:[email protected]
漏洞编号:CVE-2021-33623
漏洞描述: trim-newlines是一个修改换行符的npm包。
Joyent trim-newlines存在安全漏洞,该漏洞源于应用于Node.js在3.0.1与4.0.1版本及之前版本中.end()方法存在相关问题。目前没有详细漏洞细节提供。
国家漏洞库信息:https://www.cnvd.org.cn/flaw/show/CNVD-2021-40508
影响范围:(∞, 3.0.1)
最小修复版本:3.0.1
缺陷组件引入路径:[email protected]>[email protected]>[email protected]>[email protected]

另外还有6个漏洞,详细报告:https://mofeisec.com/jr?p=ad4f90

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.