一、安装
npm install koa-router --save
二、基本使用
const Koa = require('koa')
// 1. 导入路由
const Router = require('koa-router')
const app = new Koa()
// 2. 实例化路由
const router = new Router()
// 3. 编写路由
router.get('/classic/latest', async ctx => {
ctx.body = {key: 'calssic'} // 返回json数据
})
// 4. 注册路由
app.use(router.routes())
app.listen(3000, () => {
console.log('koa服务启动成功,可以访问localhost:3000')
})
三、具体使用
3.1、文件建立
- 首先,在
app
主目录新建一个 文件夹api 或 router
- 考虑版本的兼容性,在
api
下面新建一个版本文件夹v1
- 根据主题划分,新建不同主题的 JS 文件
3.2、编写路由文件
过程与基本使用类似
// 1. 导入路由
const Router = require('koa-router')
const router = new Router()
// 2. 编写路由
router.get('/v1/classic/latest', async ctx => {
ctx.body = {key: 'calssic'}
})
// 3. 导出路由
module.exports = router
需要导出,供主文件调用
3.3、编写主文件:app.js
与基本使用不同的是,路由相关的业务,全部通过导入
const Koa = require('koa')
const app = new Koa()
// 4. 导入路由文件
const classicRouter = require('./api/v1/classic')
const bookRouter = require('./api/v1/book')
// 5. 注册路由文件
app.use(classicRouter.routes())
app.use(bookRouter.routes())
app.listen(3000, () => {
console.log('koa服务启动成功,可以访问localhost:3000')
})
四、自动注册路由
4.1、安装依赖require-directory
npm install require-directory --save
4.2、改良刚刚的代码
主文件:app.js
// 引入 koa 模块
const Koa = require('koa')
const app = new Koa()
// 1. 导入
const Router = require('koa-router')
const requireDirectory = require('require-directory')
// 2. 获取路由对象数组
// 每获得一个路由文件对象,就会执行一次回调函数
const modules = requireDirectory(module, './app/api', {visit: whenLoadModule})
function whenLoadModule(obj) {
// 判断这个文件返回的对象,是不是一个 路由
if(obj instanceof Router){
// 是的话,就注册
app.use(obj.routes())
}
}
app.listen(3000, () => {
console.log('koa服务启动成功,可以访问localhost:3000')
})
4.3、封装成工具类
封装
/**
* 用来存放一些公用方法
*/
const requireDirectory = require('require-directory')
const Router = require('koa-router')
class InitManager {
// 入口方法
static initCore(app, path) {
InitManager.app = app // 从外面传进来koa对象
InitManager.initLoadRouters()
}
// 加载路由文件
static initLoadRouters() {
// 绝对路径
const aipDirectory = `${process.cwd()}/app/api`
requireDirectory(module, aipDirectory, {visit: whenLoadModule})
function whenLoadModule(obj) {
// 判断这个文件返回的对象,是不是一个 路由
if(obj instanceof Router){
// 是的话,就注册
InitManager.app.use(obj.routes())
}
}
}
}
module.exports = InitManager
使用
// 1. 导入
const InitManager = require('./core/init')
// 2. 加载注册路由
InitManager.initCore(app)