热搜: fiddler git ip 代理
历史搜索

16.Egg.js教程

游客2024-12-05 12:33:02
目录文章目录
  1. 重新编写一个方法
  2. 编写 Contenxt 扩展
  3. 测试请求参数获得情况
  4. 总结

接着上文,再来学习一下 Egg.js 中对 Context(上下文)的扩展。

重新编写一个方法

为了学习更简单明了,在/app/controller/mybj.js文件里重新编写一个方法newContext()。先用最简单的方式,在页面显示一个方法名称newContext就可以了。

async newContext(){
  const {ctx} = this ; 
  ctx.body = 'newContext';
}

写完方法,到/app/router.js里,配置路由

router.get('/newContext',controller.mybj.newContext);

路由配置完成后,可以在终端中用npm run dev打开测试服务,然后在浏览器里输入http://127.0.0.1:7001/newContext如果能正常在页面中显示出newContext就说明正常了,可以继续下面的操作。

编写 Contenxt 扩展

上面的一些准备方法和路由都写好后,就可以开始本节的正式内容了“扩展 Context 方法”。以前通过上下文来获取传递参数时,get方法请求和post方法请求的获取方式是不同的,我们编写的方法就是让这两个请求获取参数的方法统一化,都用params()方法。

/app/extend文件夹下,新建一个文件context.js(此文件名称是 Egg.js 要求的固定写法,不能改变)。然后编写下面的代码。

module.exports = {
  params(key){
    const method = this.request.method
    if(method ==='GET'){
      return key ? this.query[key] : this.query;
    }else{
      return key? this.request.body[key] : this.request.body;
    }
  }  
};

写完之后,打开/app/controller/mybj.js文件,使用刚编写的params获取参数,然后打印在服务端控制台。

async newContext(){
  const {ctx} = this ; 
  const params = ctx.params();
  console.log(params);
  ctx.body = 'newContext';
}

这样写完,理论上就可以接收postget请求的参数都可以了。

测试请求参数获得情况

get 请求参数获取

直接在浏览器里输入:

http://127.0.0.1:7001/newContext?username=mybj

在到 VSCode 的终端中查看结果,是可以接收到{ username: 'mybj' }参数的。

post 请求参数获取

get请求没问题了,先修改router.js,把请求方式改为post

router.post('/newContext',controller.mybj.newContext);

这里继续使用第 06 节中讲过的REST Client插件进行 Post 请求测试。在根目录下,打开test.http文件,然后编写测试代码。

POST http://127.0.0.1:7001/newContext  
Content-Type: application/json

{
    "name":"小红",
    "age":18
}

写好后,点击Send Request按钮测试,可以看到也是可以接收到 POST 传递的参数的。

总结

本文我们讲解了 Egg.js 中对 Context(上下文对象)的方法扩展,我们编写了一个可以同时接受POSTGET的请求的参数 Context 扩展方法,并进行了基本的测试。

标签:egg.js