【问题标题】:Axios error Data after transformation must be a string, an ArrayBuffer, a Buffer, or a Streamaxios报错转换后的数据必须是字符串、ArrayBuffer、Buffer或Stream
【发布时间】:2019-11-10 05:21:28
【问题描述】:

我在尝试使用 axios 进行 POST 请求时收到此错误:

Error: Data after transformation must be a string, an ArrayBuffer, a Buffer, or a Stream at createError

这是我的要求:

async function fetchAndHandleErrors() {
  const url = `/claim/${claimId}`;
  const headers = {
    Accept: 'application/json',
    Authorization: `Bearer ${token}`,
  };

  const body = new FormData();
  body.append('damage_description', damageDescription);
  body.append('damaged_phone', {
    uri: imageUri,
    type: 'image/jpeg', // or photo.type
    name: imageUri,
  });

  const result = await axios({
    'post',
    url: `${baseUrl}${url}`,
    data: body,
    headers,
  });
  return result.data;
}

我尝试删除 result.data 并仍然得到相同的错误。这是为什么呢?

【问题讨论】:

  • 有什么解决办法吗?

标签: javascript react-native axios


【解决方案1】:

如果您最终仍需要解决此问题,我设法通过使用 formData.pipe() 方法消除了此错误。对于您的情况,它可能如下所示:

import axios from 'axios'
import concat from 'concat-stream'
import fs from 'fs'
import FormData from 'form-data'

async function fetchAndHandleErrors() {
  const file = fs.createReadStream(imageUri)

  let body = new FormData();
  body.append('damage_description', damageDescription);
  body.append('damaged_phone', file);

  body.pipe(concat(data => {    
    const url = `/claim/${claimId}`;
    const headers = {
      'Authorization': `Bearer ${token}`,
      ...body.getHeaders()
    };

    const result = await axios({
      'post',
      url: `${baseUrl}${url}`,
      data: body,
      headers,
    });

    return result.data;
  }))
}

如果您仍然遇到问题,请告诉我,我们很乐意为您提供帮助!

【讨论】:

    猜你喜欢
    • 2018-04-24
    • 2022-01-12
    • 2021-01-04
    • 1970-01-01
    • 2021-12-07
    • 2022-07-14
    • 2021-03-16
    • 1970-01-01
    • 2021-04-04
    相关资源
    最近更新 更多