💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、豆包、星火、月之暗面及文生图、文生视频 广告
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; }; ~~~