プロジェクト構造:
コード:
// app.js
const Koa = require('koa')
const requireDirectory = require('require-directory')
const Router = require('koa-router')
// app就是应用程序对象,里面包含各种中间件
const app = new Koa()
requireDirectory(module, './app/api/v1', {
visit: whenLoadModule
})
function whenLoadModule(obj) {
if (obj instanceof Router) {
app.use(obj.routes())
}
}
app.listen(9999, () => {
console.log('server running at port 9999...')
})
// book.js
const Router = require('koa-router')
// 实例化router
const router = new Router()
router.get('/v1/book/latest', (ctx, next) => {
ctx.body = {
key: 'book'}
})
module.exports = router
// classic.js
const Router = require('koa-router')
// 实例化router
const router = new Router()
router.get('/v1/classic/latest', (ctx, next) => {
ctx.body = {
key: 'classic'}
})
module.exports = router
app.jsはエントリファイルであり、コードは冗長で複雑すぎないようにする必要があります。たとえば、ここのコードはapp.jsに入れるのは適切ではありません。コードを
リファクタリングして、ルートに新しいコアフォルダを作成しましょう。ディレクトリを使用して、すべてのパブリックメソッドまたはクラスを配置するには、新しいファイルinit.jsを作成します。
// init.js
const requireDirectory = require('require-directory')
const Router = require('koa-router')
class InitManager {
static initCore(app) {
// 入口方法
InitManager.app = app
InitManager.initLoadRouters()
}
static initLoadRouters() {
requireDirectory(module, `${
process.cwd()}/app/api/`, {
visit: whenLoadModule
})
function whenLoadModule(obj) {
if (obj instanceof Router) {
InitManager.app.use(obj.routes())
}
}
}
}
module.exports = InitManager