使用 Axios 获取 HTTP 响应主体

发布于 2022-12-12 20:24:44 字数 3484 浏览 117 评论 0

当你 awaitAxios 请求 上,您会得到 Axios 响应 。 Axios 响应是一个 具有多个属性的POJO ,包括 data ,其中包含已解析的响应正文。

const axios = require('axios');

const res = await axios.get('https://httpbin.org/get', { params: { answer: 42 } });

res.constructor.name; // 'Object', means `res` is a POJO

// `res.data` contains the parsed response body
res.data; // { args: { answer: 42 }, ... }
res.data instanceof Object; // true

Axios 响应包含其他几个属性,例如 status ,其中包含 HTTP 响应状态代码(如 200 或者 404 ). 但大多数时候你并不关心请求成功后的响应码,所以你会经常看到直接使用 promise chaining 获取响应体的代码。

const data = await axios.get(url).then(res => res.data);

您还可以使用 解构赋值 获取响应主体。

// Equivalent to `const data = await axios.get(url).then(res => res.data)`
const { data } = await axios.get(url);

自动解析

axios 根据 HTTP 响应的解析响应 Content-Type 标头。 当响应的内容类型是 application/json , Axios 会自动尝试将响应解析为 JavaScript 对象。

const axios = require('axios');

const res = await axios.get('https://httpbin.org/get', { params: { answer: 42 } });

res.headers['content-type']; // 'application/json'

请记住,响应标头是由服务器发送的。 因此,如果服务器发回不同的内容类型,您可能需要自己处理响应。

对于其他内容类型,例如 text/html , 这 res.data 属性 将是一个字符串。

const axios = require('axios');

const res = await axios.get('https://httpbin.org/html');

res.headers['content-type']; // 'text/html; charset=utf-8'

typeof res.data; // 'string'
res.data; // '... <h1>Herman Melville - Moby-Dick</h1> ...'

串流

您可以配置的类型 data 使用 Axios 的属性 responseType 目的。 默认, responseType 被设定为 'json' ,这意味着 Axios 将尝试将响应解析为 JSON。

但是,如果您希望使用 Axios 下载图像,那是不正确的。 你可以设置 responseType'arraybuffer' 将响应作为 ArrayBuffer 获取:

const axios = require('axios');

const res = await axios.get('https://images.unsplash.com/photo-1506812574058-fc75fa93fead', {
  responseType: 'arraybuffer'
});

const fs = require('fs');
fs.writeFileSync('./south-beach.jpg', res.data);

您还可以设置 responseType'stream' 以 Node.js 流的形式获取响应:

const axios = require('axios');

const res = await axios.get('https://images.unsplash.com/photo-1506812574058-fc75fa93fead', {
  responseType: 'stream'
});

const fs = require('fs');
res.data.pipe(fs.createWriteStream('./south-beach.jpg'));

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

哎呦我呸!

暂无简介

0 文章
0 评论
23 人气
更多

推荐作者

懂王

文章 0 评论 0

清秋悲枫

文章 0 评论 0

niceone-tech

文章 0 评论 0

小伙你站住

文章 0 评论 0

刘涛

文章 0 评论 0

南街九尾狐

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文