Koa 路由

路由

我们第一步需要做的,就是将具体的访问路径,指向特定的功能模块,这是路由的工作。

const koa = require('koa2')
const app = new koa()

app.use(async (ctx, next) => {
    if (ctx.request.path === '/') { // 首页
      ctx.response.status = 200
      ctx.response.body = 'index'
    } else if (ctx.request.path === '/list') { // 列表页
      ctx.response.status = 200
      ctx.response.body = 'list'
    } else {
    	ctx.throw(404, 'Not found') // 404
    }
  await next()
})

app.listen(3000)

当然了,我们可以根据 ctx.request.path 这样一直的判断下去,但是这样是很繁琐的。类似这样繁琐的工作,已经有人封装成特定的插件共享到社区,解决我们这个问题的模块,叫做 koa-router,接下来我们引入它。


koa-router

这是一个路由管理模块,我们新建一个目录 urls 存放我们的控制器,然后这些控制器通过 app.jskoa-router 模块加载。

app.js

// 路由模块使用前需要先安装和实例化
const Router = require('koa-router')
const router = new Router()

// 首页
app.use(async (ctx, next) => {
    if (ctx.request.path === '/') {
      ctx.response.status = 200
      ctx.response.body = 'index'
    }
    await next()
})

// 其他页面通过 router 加载
let urls = fs.readdirSync(__dirname + '/urls')
urls.forEach((element) => {
    let module = require(__dirname + '/urls/' + element)
    /*
      urls 下面的每个文件负责一个特定的功能,分开管理
      通过 fs.readdirSync 读取 urls 目录下的所有文件名,挂载到 router 上面
    */
    router.use('/' + element.replace('.js', ''), module.routes(), module.allowedMethods())
})
app.use(router.routes())

urls/home.js

const Router = require('koa-router')
const home = new Router()

// /home
home.get('/', async (ctx, next) => {
    ctx.response.status = 200
    ctx.response.body = 'home'
    await next()
})

// home/list
home.get('/list', async (ctx, next) => {
    ctx.response.status = 200
    ctx.response.body = 'home-list'
    await next()
})

module.exports = home
Koa 教程 Koa 入门 Koa HTTP Koa 开发框架 Koa 路由 Koa 静态文件 Koa bodyparser Koa 视图 Koa 数据库 Koa 记录日志