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,不知道啥玩意儿。