道者编程

nodejs-koa(三)控制器

一:首先在目录建立控制器

我们用两种方式来实现es6的class,以及直接exports模块化方式

1:class方式:

这种写法的有点更加符合编程语言,熟悉php、java等等一看就会。首先在BaseController.js写一个基类,当然也可以不用写。

module.exports = class BaseController {
    constructor() {
    }

    // 去掉字符串左右指定字符
    trim(str,remove=','){
        str = str.trim()
        return str.replace(new RegExp('^\\'+remove+'+|\\'+remove+'+$', 'g'), '');
    }
};
  
 我这里就写了一个方法,可以自己扩展。

然后写一个控制器:HomeController.js

const BaseController = require("./BaseController");
module.exports = class HomeController extends BaseController {
    
    async main(ctx){
        super.trim('123'); //调用 父类的 trim方法
        console.log(ctx.request.query.id); //获取一个 GET id
    } 
}

 一个简单的控制器就写好了。下一步加入路由:

const router = require('koa-router')(); //引入路由模块且实例化

const HomeControllers = require('../controller/HomeController'); //导入控制器
const HomeController = new HomeControllers; //实例化

router.get('/',HomeController.main); // 执行HomeController控制器的main方法

module.exports = router;

 2:exports模块化方式,HomeController.js里面改成这样

//相当于上面class的main方法
exports.main = async ctx => {
    console.log(ctx.request.query.id); //获取一个 GET id
},

//这里多写一个方法home,多个就这样干
exports.home = async ctx => {

}
 然后我们改路由,很简单,因为这里不是class,所以不用new了。
const router = require('koa-router')(); //引入路由模块且实例化

const HomeController = require('../controller/HomeController'); //导入控制器

router.get('/',HomeController.main); // 执行HomeController控制器的main方法
router.get('/category/:category',HomeController.main);

module.exports = router;
 这里有个坑:ctx.body 变量不存在的话,返回返回http code 204,不知道啥玩意儿。


最新评论:
我要评论:

看不清楚