【koa2约定式路由自动挂载mount-koa-routes@next】

前言

我们都知道经典的路由都是声明式(配置式)的,比如koa-router和Express内置的路由都是这样的,但随着项目的迭代,这部分代码就会变的十分冗余。

按照约定大于配置的思想,如何实现一种路由自动加载机制,以取代手动编写冗余的路由代码。经过查阅资料在《狼书》卷3,发现mount-koa-routes@next这个模块可以帮我实现这个想法。

使用

  • 第一步:(前提是已经通过koa-generator模版生成koa2项目)
npm install --save mount-koa-routes@next
  • 第二步:

在app.js文件里修改两处

1)、第一处,先移除

const index = require('./routes/index')  
const users = require('./routes/users')

2)、然后使用mount-koa-routes替换

const mount = require('mount-koa-routes')

3)、第二处,将加载路由移除

app.use(index.routes(), index.allowedMethods())  
app.use(users.routes(), users.allowedMethods())

4)、使用mount方法替换路由

mount(app, __dirname + '/routes', true) // 第三个参数:是否打印路由到控制台(true, false)

这样就可以将当前目录的routes子目录下的所有.js后缀文件作为路由并实现自动加载。

  • app: Koa的app实例对象。
  • __dirname + ‘/routes’: 要加载的路由目录
  • true: 表示打印日志

修改完后,npm start启动服务器,测试修改效果

【koa2约定式路由自动挂载mount-koa-routes@next】_第1张图片

在浏览器直接访问127.0.0.1:3000/string即可验证

自动加载约定

  • 文件内的路由和正常路由是一样的,写法不变,所有的get/post等都在方法中定义。
  • index.js文件会转换为根目录/
  • 非index.js文件会直接将文件名作为路由路径,比如users.js的路由就是/users。

这样做即有好处也有坏处,好处在于减少了代码,坏处是灵活性略差。总体来讲,好处事大于坏处的。

你可能感兴趣的:(node.js)