mirror of
https://github.com/tenrok/axios.git
synced 2026-06-17 19:21:29 +03:00
toFormData helper function (#3757)
* adding toFormData test * adding toFormData Co-authored-by: Jay <jasonsaayman@gmail.com>
This commit is contained in:
@@ -0,0 +1,55 @@
|
|||||||
|
'use strict';
|
||||||
|
|
||||||
|
function combinedKey(parentKey, elKey) {
|
||||||
|
return parentKey + '.' + elKey;
|
||||||
|
}
|
||||||
|
|
||||||
|
function buildFormData(formData, data, parentKey) {
|
||||||
|
if (Array.isArray(data)) {
|
||||||
|
data.forEach(function buildArray(el, i) {
|
||||||
|
buildFormData(formData, el, combinedKey(parentKey, i));
|
||||||
|
});
|
||||||
|
} else if (
|
||||||
|
typeof data === 'object' &&
|
||||||
|
!(data instanceof File || data === null)
|
||||||
|
) {
|
||||||
|
Object.keys(data).forEach(function buildObject(key) {
|
||||||
|
buildFormData(
|
||||||
|
formData,
|
||||||
|
data[key],
|
||||||
|
parentKey ? combinedKey(parentKey, key) : key
|
||||||
|
);
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
if (data === undefined) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var value =
|
||||||
|
typeof data === 'boolean' || typeof data === 'number'
|
||||||
|
? data.toString()
|
||||||
|
: data;
|
||||||
|
formData.append(parentKey, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* convert a data object to FormData
|
||||||
|
*
|
||||||
|
* type FormDataPrimitive = string | Blob | number | boolean
|
||||||
|
* interface FormDataNest {
|
||||||
|
* [x: string]: FormVal
|
||||||
|
* }
|
||||||
|
*
|
||||||
|
* type FormVal = FormDataNest | FormDataPrimitive
|
||||||
|
*
|
||||||
|
* @param {FormVal} data
|
||||||
|
*/
|
||||||
|
|
||||||
|
module.exports = function getFormData(data) {
|
||||||
|
var formData = new FormData();
|
||||||
|
|
||||||
|
buildFormData(formData, data);
|
||||||
|
|
||||||
|
return formData;
|
||||||
|
};
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
var toFormData = require("../../../lib/helpers/toFormData");
|
||||||
|
|
||||||
|
describe("toFormData", function () {
|
||||||
|
it("Convert nested data object to FormDAta", function () {
|
||||||
|
var o = {
|
||||||
|
val: 123,
|
||||||
|
nested: {
|
||||||
|
arr: ["hello", "world"],
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
convertedVal = toFormData(o);
|
||||||
|
expect(convertedVal instanceof FormData).toEqual(true);
|
||||||
|
expect(Array.from(convertedVal.keys()).length).toEqual(3);
|
||||||
|
expect(convertedVal.get("val")).toEqual("123")
|
||||||
|
expect(convertedVal.get("nested.arr.0")).toEqual("hello")
|
||||||
|
});
|
||||||
|
});
|
||||||
Reference in New Issue
Block a user