Egg.js 学习笔记01

Posted Deflect-o-Bot Blog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Egg.js 学习笔记01相关的知识,希望对你有一定的参考价值。

Egg.js 为企业级框架和应用而生

Controller概念:解析用户输入,处理并返回响应的结果;

框架中,Controller层主要是对用户的请求的参数进行处理(校验、转换),然后调用 service 方法处理业务:

  1. 获取用户通过HTTP传递过来的请求参数
  2. 校验,组装参数
  3. 调用Service进行业务处理,必要时转换Service返回的结果以适应客户端需求
  4. 通过HTTP将结果响应给客户端

一个简单的Controller如下:(返回body内容而已)

const Controller = require(\'egg\')

class IndexController extends Controller 
  async index() 
     const ctx = this
     ctx.body = \'hi, eggJs\'   
    


module.exports = IndexController

一个稍微复杂一点的Controller 如下 目录位置:app/controller/post.js

const  Controller  = require(\'egg\');

class PostController extends Controller 
  async create() 
    const  ctx, service  = this;
    const createRule = 
      title:  type: \'string\' ,
      content:  type: \'string\' ,
    ;
    // 校验参数
    ctx.validate(createRule);
    // 组装参数
    const author = ctx.session.userId;
    const req = Object.assign(ctx.request.body,  author );
    // 调用 Service 进行业务处理
    const res = await service.post.create(req);
    ctx.body =  id: res.id ;
    ctx.status = 201;
  

module.exports = PostController;

注意上面这个demo是不能直接运行的,ctx下的属性和方法我们并没有创建,怎么解决呢?
因为Controller继承自egg.Controller,会有几个属性挂在this上分别是:
this.ctx, this.app, this.service, this.config, this.logger
其中 this.ctx,即请求的上下文Context,在这里就可以封装我们的属性和方法,也就是上面demo的解决方式

目录位置:app/extend/context.js

module.exports = 
  validate(param) 
    // 校验参数的方法
    console.log(\'参数是:\', param);
  ,
;

 Query参数
Controller是业务开发中唯一和http协议打交道的地方,所以难免遇到参数获取的问题,这里获取方式和Koa类似:
在URL中?后面的部分是一个 Query String,在get请求中传递参数。如:/post?id=12&username=green,我们可以通过ctx.query拿到解析过后的参数

URL:  http://127.0.0.1:7002/post?id=12&name=green
class
PostController extends Controller async listPost() const query = this.ctx.query //id:"12",name:"green"

注意:当客户端传递的key有重复的情况下,ctx.query只取第一次出现的值,后面重复key的值均忽略

如果设计成客户端传递相同的key,如 http://127.0.0.1:7002/post?id=12&name=green&id=13&name=king,可以使用ctx.queries获取参数,参数将以数组的形式作为值存在对应的键下 

id:["12","13"],name:["green","king"]

Params参数

在路由上,如果申明的参数,可以通过ctx.params获取

URL: http://127.0.0.1:7002/188/post?id=12&name=green&id=13&name=king

路由 router.get(\'/:testId/post\', controller.post.create);

class postController extends Controller 
  async listApp() 
    console.log(this.ctx.params.testId,); // testId: "188"
  

 

以上是关于Egg.js 学习笔记01的主要内容,如果未能解决你的问题,请参考以下文章

egg.js + react 实战:从 0 到 1 实现记账本小册学习笔记合集(持续更新中)

egg.js + react + zarm ui + vite2.0 全栈项目实战:从 0 到 1 实现记账本小册学习笔记合集(完结)

Node.js学习9~Egg.js框架学习和部署实战

Egg 初学笔记

2018-01-13 web 开发学习记录

egg.js入门导航:安装使用与学习