分类控制器
控制器的作用
其实最初接触控制器是学习thinkphp的时候,一开始只知道,只要在固定php里面assign,diplay,就能够自动定位到模板渲染,然后输出。控制器的作用就是如此,路由定位到对应的控制器之后,开始走控制器,控制器内写业务逻辑(大程序为了便于维护会单独组织其他model层来处理业务逻辑),处理完所有数据之后渲染视图模板或者直接输出固定格式数据(接口)。
控制器目录
外层新建controller文件夹,存放所有控制器,只有两层或者一层目录层级下只需要把所有控制器放到这里就好了,超过两层可能就要分门别类在控制器内部多创建几层目录以满足需求。
编写控制器文件
这里只写一个小demo,之后会再扩展
controller目录下
controller/index.php
'use strict';
const db_users = require('../mobel/db_model/users');
const view = require('../app_need/view');
var index = {};
index.getUsers = async function (ctx, next) {
var users = JSON.parse(JSON.stringify(await db_users.findAll()));
console.log(users);
var v = view.render('index.html', { users:users });
ctx.body = v;
}
module.exports = index;
对应路由文件
routes/index.js
const router = require('koa-router')();
const index=require('../controller/index');
router.prefix('/index');
router.get('/', index.getUsers);
router.get('/haha', function (ctx, next) {
ctx.body = '/index/haha';
});
module.exports = router;
对应模板文件
views/index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{% for user in users %}
{{user.name}}:{{user.password}}<br/>
{% endfor%}
</body>
</html>
对于模板模块编译符的使用还是看文档比较好,我这写的肯定比不上文档。
这一套流程下来我们就实现了控制器的基本作用,由路由导入开始执行,调度数据库,处理数据,渲染视图,输出。
规范化
- 控制器的名字需要对应路由模块的名字(除了_root和_index)
- 控制器对应方法输出的路径需要加上对应控制器名称的路径(之前一个demo出于方便并没有应该改成index/index.html)
- 相对应的模板也要放到对应的目录下。
最终项目地址:https://github.com/jijuxie/koa2_all.git