Project structure:
Code:
// 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
Our app.js is the entry file, and the code should not be too redundant and complicated. For example, the code here is not good to put in app.js:
so let's refactor the code, create a new core folder in the root directory, and use To put all public methods or classes, create a new file 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