美文网首页
【融职培训】Web前端学习 第8章 egg基础教程3 控制器

【融职培训】Web前端学习 第8章 egg基础教程3 控制器

作者: lmonkey_01 | 来源:发表于2020-06-24 11:13 被阅读0次

    在学之前我们先了解一下什么是Controller

    简单的说Controller负责解析用户的输入,处理后返回相应的结果,如

    在RESTful接口中,控制器接受用户的参数,从数据库中查找内容返回给用户或将用户的请求更新到数据库中。

    在HTML页面请求中,Controller根据用户访问不同的URL,渲染不同的模板得到HTML返回给用户。

    在代理服务器中,控制器将用户的请求转发到其他服务器上,变为其他服务器的处理结果返回给用户。

    一,创造控制器

    app/controller/是创建Controller的文件夹,或者我要合并一个首页或是基础页面的HomeController。

    创建HomeController首先约会app.Controller和导出HomeController。

    如果熟悉koa2的语法,使用ctx某些则非常方便,渲染模板await this.ctx.render('home/index')直接即可。

    二,请求与响应

    框架通过在Controller上绑定的Context实例,提供了许多便捷方法和属性获取用户通过HTTP请求发送过来的参数。

    询问

    在URL中?后面的部分是一个 Query String,该部分经常用于GET类型的请求中传递参数。例如GET /search?name=egg&age=26中name=egg&age=26就是用户传递过来的参数。我们可以通过context.query(为一个对象)拿到解析过后的这个参数体

    1模块。出口 =  应用 =>  { 2 3类 HomeController  扩展了 控制器 {  4  async  getQuery () {  5const  queryObj  =this 。ctx 。查询;  6      控制台。日志(queryObj 。年龄);  7      控制台。日志(queryObj );  8//打印结果:{name:'egg',age: 9'26 '} } 10  } 11return  SearchController ; 12} ;

    当Query String中的键重复时,ctx.query只取key首次出现时的值,后面再出现的都会被忽略。GET /posts?category=egg&category=koa通过ctx.query拿到的值是{category:'egg'}。

    这样处理的原因是为了保持统一性,由于通常情况下我们都不会设计让用户传递key相同的查询字符串,所以我们经常会写类似下面的代码:

    1const  key  =  ctx 。查询。关键 ||  '' ; 2如果 (关键。startsWith ('蛋' )) { 3//做一些事情4}

    而如果有人有人主动发起请求在查询字符串中带上重复的key来请求时就会引发系统异常。因此框架保证了从ctx.query 上获取的参数一旦存在,一定是字符串类型。

    查询

    有时我们的系统会设计成让用户传递相同的键,例如GET /posts?category=egg&id=1&id=2&id=3。针对这种情况,框架提供了ctx.queries对象,这个对象也解析了Query String,但是它不会改变任何一个重复的数据,否则将他们都放到一个摘要中:

    1// GET / posts?category = egg&id = 1&id = 2&id = 3  2类 PostController  扩展了 控制器 {  3  异步 listPosts () {  4    控制台。日志(此。CTX 。查询);  5// {  6//类别:['egg'], 7// id:['1','2','3'], 8//}  9  } 10}

    ctx.queries 上所有的key如果有值,也一定会是层叠类型。

    三,获取请求参数

    路由器参数

    在Router中,我们介绍了Router上也可以申明参数,这些参数都可以通过ctx.params获取到。

    1// app.get('/ projects /:projectId / app /:appId','app.listApp'); 2// GET / projects / 1 / app / 2 3类 AppController  扩展了 控制器 { 4  异步 listApp () { 5断言。等于(此。CTX 。PARAMS 。专案编号, '1' ); 6断言。等于(此。CTX 。PARAMS 。APPID , '2' ); 7  } 8}

    【融职教育】在工作中学习,在学习中工作

    相关文章

      网友评论

          本文标题:【融职培训】Web前端学习 第8章 egg基础教程3 控制器

          本文链接:https://www.haomeiwen.com/subject/kccrfktx.html