按照mvc的结构,koa项目可以如下组织:
├── main.js //程序入口
├── routes.js //路由
├── package.json
├── controllers
│ ├── app.controller.js
│ ├── user.controller.js
│ └── xxxx.controller.js
├── middleware
│ └── index.js
└── models
$ npm i @koa/router $ npm i koa-views $ npm i koa-static-cache $ npm i koa-bodyparser $ npm i ejs $ npm i nodemon
//main.js
const Koa = require('koa');
const app = new Koa();
const middleware = require('./middleware');
middleware(app);
app.listen(3000, () => {
console.log('Server is running on port 3000');
});// middleware/index.js
const router = require('../routes');
const views = require('koa-views');
const path = require("path");
const staticCache = require('koa-static-cache');
const KoaBodyParser = require('koa-bodyparser');
module.exports = (app) => {
app.use(staticCache(path.join(__dirname, '../public'), {
maxAge: 365 * 24 * 60 * 60
}));
app.use(views(path.join(__dirname, '../views'), {
extension: 'ejs'
}));
app.use(KoaBodyParser());
app.use(router.routes());
app.use(router.allowedMethods());
}// routes.js
const KoaRouter = require('@koa/router');
const { AppController } = require('./controllers/app.controller');
const { UserController } = require('./controllers/user.controller');
const auth = require('./middleware/auth'); //中间件
const router = new KoaRouter()
.get('/', AppController.index);
const userRouter = new KoaRouter({ prefix: '/user' })
.get('/', auth, UserController.index)
.get('/:id', auth, UserController.index)
.post('/send', UserController.send)
router.use(userRouter.routes());
module.exports = router;路由这里通过prefix区分每一个模块的路由入口,类似与其他mvc中的routes.group
//controllers/app.controller.js
class AppController {
async index(ctx, next) {
await ctx.render('index', {
title: 'Home'
});
}
async notFound(ctx, next) {
ctx.body = '404 Not Found';
}
async serverError(ctx, next) {
ctx.body = '500 Internal Server Error';
}
}
module.exports = {
AppController: new AppController()
}www.haizhuan.tk