koa项目结构

时间:2023-03-01 浏览:160 分类:Koa

按照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入口

//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()
}