发送请求

后端程序使用 HttpClient 发起 http 请求, egg 使用 ctx.curlapp.curl 方法完成一次 HTTP 请求, 等价于 app.httpclient.request

格式:

app.httpclient.request(url, options)

GET的示例:

const Service = require('egg').Service;
module.exports = class extends Service {
  async getData() {
    const result = await this.ctx.curl('http://api.crap.cn/mock/test', {
      dataType: 'json',
    });
    return result.data;
  }
};

POST的示例:

class TestController extends Controller {
  async post() {
    const ctx = this.ctx;
    const result = await ctx.curl('https://httpbin.org/post', {
      // 必须指定 method
      method: 'POST',
      // 通过 contentType 告诉 HttpClient 以 JSON 格式发送
      contentType: 'json',
      // 请求携带的数据
      data: {
        hello: 'world',
        now: Date.now(),
      },
      // 明确告诉 HttpClient 以 JSON 格式处理返回的响应 body
      dataType: 'json',
    });
    ctx.body = result.data;
  }
}

PUT 与 DELETE 有类似的使用方式。

options 参数包括:

  • method
  • contentType
  • data
  • dataType

提示

GET 请求可以不用设置 options.method 参数,HttpClient 的默认 method 会设置为 GET。

提示

若不设置 options.contentType,HttpClient 会默认以 application/x-www-form-urlencoded 格式发送请求

返回值 result 会包含 3 个属性:status, headers 和 data

  • status: 响应状态码,如 200, 302, 404, 500 等等
  • headers: 响应头,类似 { 'content-type': 'text/html', ... }
  • data: 响应 body,默认 HttpClient 不会做任何处理,会直接返回 Buffer 类型数据。 一旦设置了 options.dataType,HttpClient 将会根据此参数对 data 进行相应的处理。

更多详情参见: HttpClient

MIT Licensed | Copyright © 2018-present 滇ICP备16006294号

Design by Quanzaiyu | Power by VuePress