Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/nervgh/koa-architect
Automates mounting and routing
https://github.com/nervgh/koa-architect
Last synced: 3 months ago
JSON representation
Automates mounting and routing
- Host: GitHub
- URL: https://github.com/nervgh/koa-architect
- Owner: nervgh
- License: mit
- Created: 2017-05-05T10:58:35.000Z (over 7 years ago)
- Default Branch: master
- Last Pushed: 2017-10-05T14:55:51.000Z (over 7 years ago)
- Last Synced: 2024-10-07T16:37:00.725Z (3 months ago)
- Language: JavaScript
- Homepage:
- Size: 20.5 KB
- Stars: 3
- Watchers: 4
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-koa - koa-architect - 自动挂载和路由。 ![](https://img.shields.io/github/stars/nervgh/koa-architect.svg?style=social&label=Star) ![](https://img.shields.io/npm/dm/koa-architect.svg?style=flat-square) (仓库 / 中间件)
README
# koa-architect
[![NPM version][npm-image]][npm-url]
[![Build status][travis-image]][travis-url]
[![Test coverage][coveralls-image]][coveralls-url]## About
Reads a folder with middleware and routes and reduces them to middleware using [koa-mount](https://github.com/koajs/mount) and [koa-trie-router](https://github.com/koajs/trie-router).
That eventually allows you run your app extremely simple:```js
const Koa = require('koa')
const architect = require('koa-architect')let app = new Koa()
for(let middleware of architect.readMiddlewareAndRoutes('./middleware')) {
app.use(middleware)
}
```
All of you need is keep in mind next things:
1. each your file should returns a middleware or routes
2. if it returns middleware then it will be pushed to the middleware stack
3. if it returns routes then they will be reduced to middleware using a router### How does exactly your routes will be reduced to middleware?
```js
// router.use(fn)
exports.use = function (ctx) {
}// router.get('/', fn)
exports.get = {
'index': function (ctx) {
}
}// router.post('/foo', fn)
// router.post('/bar/:id', fn)
exports.post = {
'foo': function (ctx) {
},
'bar/:id': function (ctx) {
}
}
```## Example
Assume, we have next folder tree and code:![example](./screenshot.png)
```
middleware/
middleware/01-foo/index.js
middleware/02-bar/index.js
middleware/route/index.js
middleware/nested/index.js
middleware/nested/middleware/index/index.js
middleware/nested/middleware/baz/index.js
```
**middleware/01-foo/index.js**
```js
// Middleware
module.exports = function (ctx, next) {
// Doing here some work and go next
ctx.state.foo = 1
return next()
}
```
**middleware/02-bar/index.js**
```js
// Middleware
module.exports = function (ctx, next) {
// Doing here some work and go next
ctx.state.bar = 1
return next()
}
```
**middleware/route/index.js**
```js
// Routes
exports.get = {
'index': function (ctx) {
ctx.response.body = ctx.state
}
}exports.post = {
'test/:id': function (ctx) {
ctx.response.body = ctx.params.id
}
}
```
**middleware/nested/index.js**
```js
// Nested middleware and/or routesconst path = require('path')
const architect = require('koa-architect')// Since this folder contains nested middleware/routes
// we need use koa-architect to read themexports.use = architect.readMiddlewareAndRoutes(path.join(__dirname, './middleware'))
```
**middleware/nested/middleware/index/index.js**
```js
// Routes
exports.use = function (ctx) {
ctx.response.body = ctx.originalUrl
}
```
**middleware/nested/middleware/baz/index.js**
```js
// Routes
exports.get = {
'index': function (ctx) {
ctx.response.body = ctx.originalUrl
}
}
```And we launch our app using this way:
```js
const Koa = require('koa')
const architect = require('koa-architect')let app = new Koa()
for(let middleware of architect.readMiddlewareAndRoutes('./middleware')) {
app.use(middleware)
}
```Thus we will get a server which handle requests next way:
```
GET --> /
GET <-- 404 "Not Found"GET --> /route
GET <-- 200 {"foo":1,"bar":1}POST --> /route/test/1
POST <-- 200 "1"GET --> /nested
GET <-- 200 "/nested"GET --> /nested/baz
GET <-- 200 "/nested/baz"
```See [test/fixtures](./test/fixtures) for details.
## Package managers
### NPM
```
npm install koa-architect
```
You could find this module in npm like [_koa-architect_](https://www.npmjs.com/search?q=koa-architect).[npm-image]: https://img.shields.io/npm/v/koa-architect.svg?style=flat
[npm-url]: https://npmjs.org/package/koa-architect
[travis-image]: https://img.shields.io/travis/nervgh/koa-architect.svg?style=flat
[travis-url]: https://travis-ci.org/nervgh/koa-architect
[coveralls-image]: https://img.shields.io/coveralls/nervgh/koa-architect.svg?style=flat
[coveralls-url]: https://coveralls.io/r/nervgh/koa-architect?branch=master