koa路由使用基本步骤
var Koa = require('koa');
var Router = require('koa-router');
var app = new Koa(); //实例化koa
var router = new Router(); //实例化路由
router.get('/', (ctx, next) => { //编写接口
// ctx.router available
});
app //注册路由中间件
.use(router.routes())
.use(router.allowedMethods());
api模块化及分类
众多周知,我们提倡模块化开发
,便于管理,对于路由系统,我们非常建议采用模块化开发,例如,一个项目会有很多个版本,自然其api也会有很多个版本,但我们提倡开闭原则
,即建议不要删除或修改选来的,而是在原来基础上增加
例如第一版本的所有api放在v1
文件夹下,第二版本的放在v2
文件夹下,而没一个版本的api作用多样,例如一个图书管理的api,有的是请求与书相关的,例如书名等,有些是进行筛选的,这样api可分存在两个文件中,如书相关的存与book.js
, 分类的存于classic.js
,如图:
当需要切换到哪一版本的api时,改下路径名就行了,如:
获取书本名:./api/v1/book
获取第二版本的书名: ./api/v2/book
上book.js代码
const Router = require("koa-router")
const router = new Router()
router.get('/v1/book/latest', (ctx, next) => {
ctx.body = {
name: "book"
}
})
module.exports = router
上app.js代码
const Koa = require("koa")
const app = new Koa()
const book = require('./api/v1/book.js')
const classic = require('./api/v1/classic.js')
//注册各路由文件,其实就相当于是注册中间件
app.use(book.routes())
app.use(classic.routes())
app.listen(3000)
其实分别引入路由文件的方式是不方便的,我们更希望是统一引入,自动注册
使用require-directory模块使模块自动加载
通过require-directory
读取某文件夹下的所有文件,require-directory
是个npm 包
,需手动安装
用法:
requireDirectory(module, path, {
visit: functionName
})
module
表示读取模块,path
表示要读取的路径,一般为文件夹路径,当然可以是文件路径,不过如果是文件为何不直接用require
? 最后一个表示每读取到一个模块执行的回调函数
,如用这个我们可判断读取到的是不是路由的实例,是的话便可在回调中进行自动注册吗,十分方便
上代码:
const Koa = require("koa")
const app = new Koa()
const Router = require("koa-router")
const requireDirectory = require('require-directory')
requireDirectory(module, './api', {
visit: whenLoadModule
})
//自动注册
function whenLoadModule(obj) {
if(obj instanceof Router) {
app.use(obj.routes())
}
}
app.listen(3000)