KOA --- 2. 路由的基本使用

一、安装

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、文件建立

  1. 首先,在app主目录新建一个 文件夹 api 或 router
  2. 考虑版本的兼容性,在 api下面新建一个版本文件夹 v1
  3. 根据主题划分,新建不同主题的 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)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值