Egg.js (五) 发送POST请求和获取参数

Egg.js (四) httpclient模块的使用 微信小程序获取用户openid写到的实际是以一个示例来发送GET请求。
Egg.js (二) GET和POST请求这里是自己写GET和POST请。
这里还是多看文档:
https://eggjs.org/zh-cn/basics/controller.html
https://eggjs.org/zh-cn/core/httpclient.html
下来还是以一个实例还写下发送POST请求。

Controller中实现

async showapi() {
    const { ctx } = this;
    // 获取post 请求参数
    let count = ctx.request.body.count;
    const url = 'https://route.showapi.com/1211-1';
    const result = await ctx.curl(url,{
      method: 'POST', // 设置请求方式 默认是GET
      dataType: 'json',
      // contentType: 'json', // 默认是 form
      data: {
        count: count,
        showapi_appid: '3****1',
        showapi_sign: 'a**********************4'
      } 
    });
    ctx.body = {
      result: result
    }
  };

这里用的是https://www.showapi.com/的免费接口。

路由中router.js

router.post('/httpclient/showapi', controller.httpClient.showapi); 

注意事项

框架对 bodyParser 设置了一些默认参数,配置好之后拥有以下特性:

当请求的 Content-Typeapplication/jsonapplication/json-patch+jsonapplication/vnd.api+jsonapplication/csp-report 时,会按照 json 格式对请求 body 进行解析,并限制 body 最大长度为 100kb
当请求的 Content-Typeapplication/x-www-form-urlencoded 时,会按照 form 格式对请求 body 进行解析,并限制 body 最大长度为 100kb
如果解析成功,body 一定会是一个 Object(可能是一个数组)。
一般来说我们最经常调整的配置项就是变更解析时允许的最大长度,可以在 config/config.default.js 中覆盖框架的默认值。

module.exports = {
  bodyParser: {
    jsonLimit: '1mb',
    formLimit: '1mb',
  },
};

如果用户的请求 body 超过了我们配置的解析最大长度,会抛出一个状态码为 413 的异常,如果用户请求的 body 解析失败(错误的 JSON),会抛出一个状态码为 400 的异常。

注意:在调整 bodyParser 支持的 body 长度时,如果我们应用前面还有一层反向代理(Nginx),可能也需要调整它的配置,确保反向代理也支持同样长度的请求 body

一个常见的错误是把 ctx.request.bodyctx.body 混淆,后者其实是ctx.response.body 的简写。

跨域问题

  1. 安装npm i egg-cors --save
  2. config/plugin.js 中添加如下代码:
exports.cors = {
  enable: true,
  package: 'egg-cors',
};
  1. config/config.default.js 中添加如下代码:
  const config = exports = {
  	……
  	……
   security: {
      csrf: {
        enable: false,
      }, // 必须加 否则: 403 Forbidden message: "missing csrf token"
      // domainWhiteList: [ '*' ]
  },
    cors: {
      origin:'*',
      allowMethods: 'GET,HEAD,PUT,POST,DELETE,PATCH,OPTIONS'
    },
  };

以上也就是一些简单的场景的使用,是上Egg.js提交的功能和说明都是非常强大的,一定多看文档。

©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页