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