node.js项目改进之分离控制器

分类控制器

控制器的作用

其实最初接触控制器是学习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>

对于模板模块编译符的使用还是看文档比较好,我这写的肯定比不上文档。
这一套流程下来我们就实现了控制器的基本作用,由路由导入开始执行,调度数据库,处理数据,渲染视图,输出。

规范化

  1. 控制器的名字需要对应路由模块的名字(除了_root和_index)
  2. 控制器对应方法输出的路径需要加上对应控制器名称的路径(之前一个demo出于方便并没有应该改成index/index.html)
  3. 相对应的模板也要放到对应的目录下。
    最终项目地址:https://github.com/jijuxie/koa2_all.git
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值