Создание данных формы без использования FormData в node-fetch - PullRequest
0 голосов
/ 02 марта 2020
  • Я использую выборку узлов для выполнения API-вызовов внутри платформы.
  • Мне нужно сделать API-вызов для передачи файла в данные формы .
  • Ниже мой код заглушки:
const fetch = require("node-fetch")
var myHeaders = {"Authorization": "Basic Y2hhdEJvdDpJRkxjYkAxMjM="
,'cache-control': 'no-cache'
,"content-type": "multipart/form-data;"
};

let file_content = "base 64 file content";

let getFormDataForWhatsAppStatement = (data,fileContent,fileExt)=>{
  let jsonData = { "data":{ "templateName":"Test_123", "fieldName":"Document_Purpose,Policy_Number,Document_Category", "fieldValue":`AttachDocument, ${data.policyNumber}, Customer_Requirement`, "docList":"Test_Doc" } }
  let formDataPairs = [];
  let finalFormData = '';

  formDataPairs.push(encodeURIComponent("") + '=' + encodeURIComponent(jsonData));
  formDataPairs.push(encodeURIComponent("") + '=' + encodeURIComponent(fileContent));

  finalFormData = formDataPairs.join('&').replace(/%20/g, '+');

  return finalFormData;
}

let formdata = getFormData({"policyNumber":"006558144"},file_content,"png");

var requestOptions = {
  method: 'POST',
  headers: myHeaders,
  body: formdata
};


fetch(url, requestOptions)
  .then(response => response.json())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));
  • Ошибка, которую я получаю, заключается в том, что граничный параметр не определен.
  • Поэтому я удалил содержимое -тип заголовка, как указано в приведенной ниже ветке: Boundary Issue

  • Но тогда он дает мне ошибку времени ожидания соединения (так как формат запроса неверен).

  • Так есть ли способ создать formData Аналогично приведенному ниже коду без использования объекта FormData?

const FormData = require('form-data');
const fetch = require("node-fetch")
var formdata = new FormData();
var myHeaders = {"Authorization": "Basic Y2hhdEJvdDpJRkxjYkAxMjM="
//,"Content-Type": "multipart/form-data; boundary=----WebKitFormBoundaryyEmKNDsBKjB7QEqu"
};

formdata.append("", "{ \n   \"data\":{ \n\n      \"templateName\":\"Test_123\",\n      \"fieldName\":\"Document_Purpose,Policy_Number,Document_Category\",\n      \"fieldValue\":\"AttachDocument, G0000784, Customer_Requirement\",\n      \"docList\":\"Test_Doc\"  \n}\n}\n");
formdata.append("", "base 64 file data", "close.png");
var requestOptions = {
  method: 'POST',
  headers: myHeaders,
  body: formdata,
  redirect: 'follow'
};

fetch(API_URL, requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));

1 Ответ

0 голосов
/ 13 марта 2020

Вместо того, чтобы буквально вводить границу, вы попытались использовать функцию data-data getBoundary () и присвоить ее переменной следующим образом:

let boundary = formdata.getBoundary();
var myHeaders = {"Authorization": "Basic Y2hhdEJvdDpJRkxjYkAxMjM="
"Content-Type": `multipart/form-data; boundary=${boundary}`
};
...