转换后的Axios错误数据必须是字符串,ArrayBuffer,Buffer或Stream

时间:2019-06-28 08:44:48

标签: javascript react-native axios

尝试使用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,但仍然遇到相同的错误。为什么会这样?

1 个答案:

答案 0 :(得分:0)

如果您最终仍然需要解决方案,则可以使用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;
  }))
}

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