MKOA引入模块的概念来组织代码和区分模块。每个功能都应该属于一个模块。接下来我们建立一个模块并编写一个可访问的控制器。
>1、根目录下创建application目录。
2、application目录下创建test目录,作为一个模块目录。
3、test目下再创建controller文件夹,作为test模块的控制器文件夹。
模块目录名、控制器目录名默认为application和controller,如需自定义,可在config文件配置,建议保持默认
~~~
module.exports={
application: 'application',//模块文件夹
controller: 'controller'//控制器文件夹名
};
~~~
> 在application/test/controller目录下创建index.js控制器文件。
index.js
~~~
module.exports = function($this){
let action={};
action['myaction']=function (){
$this.body='Hello World!';
};
return action;
};
~~~
启动app,浏览器访问 http://localhost:3000/test/index/myaction
输出'Hello World!'
**相关说明**
> 一个控制器文件可以有多个控制器方法;
控制器方法支持普通函数、生成器和async函数;
控制器对象可以添加['_before']和['_after']方法,作为公共开始和结束方法;
$this变量为koa2的ctx(koa1的this)引用。
控制器的文件夹路径与访问路径对应。一个控制器的方法访问地址构造为:域名+模块名+控制器路径+方法名;
如application/test/controller/index控制器下myaction方法,对应的访问路径为:域名/test/index/myaction ;
如需自定义路由规则可开启rewrite模块进行改写(后面章节讲解);
下面是一个更全面的控制器文件示例:
~~~
module.exports = function($this){
let action={};
action['_before']=async function (){
console.log('访问开始');
//return false;
};
action['_after']=async function (){
console.log('访问结束');
};
action['Generator']=function *(){
$this.body='Hello World!';
};
action['normal']=function (){
$this.body='Hello World!';
};
action['async']=async function (){
$this.body='Hello World!';
};
return action;
};
~~~
