2
0
mirror of https://github.com/tenrok/axios.git synced 2026-05-15 11:59:42 +03:00

Added the ability for the url-encoded-form serializer to respect the formSerializer config; (#4721)

Added test for `formSerializer` config in context of `url-encoded-form` serializer;
This commit is contained in:
Dmitriy Mozgovoy
2022-05-17 09:26:35 +03:00
committed by GitHub
parent e6f9026d51
commit bd391247b4
4 changed files with 41 additions and 9 deletions
+1 -1
View File
@@ -77,7 +77,7 @@ var defaults = {
if (isObjectPayload) {
if (contentType.indexOf('application/x-www-form-urlencoded') !== -1) {
return toURLEncodedForm(data).toString();
return toURLEncodedForm(data, this.formSerializer).toString();
}
if ((isFileList = utils.isFileList(data)) || contentType.indexOf('multipart/form-data') !== -1) {
+3 -3
View File
@@ -4,8 +4,8 @@ var utils = require('../utils');
var toFormData = require('./toFormData');
var platform = require('../platform/');
module.exports = function toURLEncodedForm(data) {
return toFormData(data, new platform.classes.URLSearchParams(), {
module.exports = function toURLEncodedForm(data, options) {
return toFormData(data, new platform.classes.URLSearchParams(), Object.assign({
visitor: function(value, key, path, helpers) {
if (platform.isNode && utils.isBuffer(value)) {
this.append(key, value.toString('base64'));
@@ -14,5 +14,5 @@ module.exports = function toURLEncodedForm(data) {
return helpers.defaultVisitor.apply(this, arguments);
}
});
}, options));
};
@@ -1,8 +1,6 @@
'use strict';
module.exports = (function getURLSearchParams(nativeURLSearchParams) {
if (typeof nativeURLSearchParams === 'function') return nativeURLSearchParams;
module.exports = typeof URLSearchParams !== 'undefined' ? URLSearchParams : (function defineURLSearchParams() {
function encode(str) {
var charMap = {
'!': '%21',
@@ -35,4 +33,4 @@ module.exports = (function getURLSearchParams(nativeURLSearchParams) {
};
return URLSearchParams;
})(URLSearchParams);
})();
+35 -1
View File
@@ -1404,8 +1404,42 @@ describe('supports http with nodejs', function () {
.then(function (res) {
assert.deepStrictEqual(res.data, obj);
done();
}, done);
}).catch(done);
});
});
});
it('should respect formSerializer config', function (done) {
const obj = {
arr1: ['1', '2', '3'],
arr2: ['1', ['2'], '3'],
};
const form = new URLSearchParams();
form.append('arr1[0]', '1');
form.append('arr1[1]', '2');
form.append('arr1[2]', '3');
form.append('arr2[0]', '1');
form.append('arr2[1][0]', '2');
form.append('arr2[2]', '3');
server = http.createServer(function (req, res) {
req.pipe(res);
}).listen(3001, () => {
return axios.post('http://localhost:3001/', obj, {
headers: {
'content-type': 'application/x-www-form-urlencoded'
},
formSerializer: {
indexes: true
}
})
.then(function (res) {
assert.strictEqual(res.data, form.toString());
done();
}).catch(done);
});
});
});