一、安装
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 文件
![KOA --- 2. 路由的基本使用](https://img.it610.com/image/info8/0321ced5b57246e696db577b92923e84.png)
文章图片
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)
推荐阅读
- 携程实习篇|Node.js之process进程
- node中package.json和package-lock.json文件的作用
- sequlize统一格式化时间
- egg 如何接收xml数据
- Node.js在WebStorm中调试
- node npm 设置全局仓库路径
- node require 导入模块解析 加载规则和加载机制
- node|node.js学习笔记-模块module
- window node配置安装的全局模块所在的路径cache的路径
- node|node.js express性能优化