2
0
mirror of https://github.com/tenrok/axios.git synced 2026-06-20 20:00:40 +03:00

fix: handling of array values for AxiosHeaders (#5085)

Co-authored-by: Jay <jasonsaayman@gmail.com>
This commit is contained in:
Dmitriy Mozgovoy
2022-10-13 22:11:01 +03:00
committed by GitHub
parent 85740c3e7a
commit 110ae9ae61
4 changed files with 45 additions and 11 deletions
Vendored
+1 -1
View File
@@ -39,7 +39,7 @@ export class AxiosHeaders {
normalize(format: boolean): AxiosHeaders; normalize(format: boolean): AxiosHeaders;
toJSON(): RawAxiosHeaders; toJSON(asStrings?: boolean): RawAxiosHeaders;
static from(thing?: AxiosHeaders | RawAxiosHeaders | string): AxiosHeaders; static from(thing?: AxiosHeaders | RawAxiosHeaders | string): AxiosHeaders;
+4 -10
View File
@@ -15,7 +15,7 @@ function normalizeValue(value) {
return value; return value;
} }
return String(value); return utils.isArray(value) ? value.map(normalizeValue) : String(value);
} }
function parseTokens(str) { function parseTokens(str) {
@@ -102,13 +102,7 @@ Object.assign(AxiosHeaders.prototype, {
return; return;
} }
if (utils.isArray(_value)) { self[key || _header] = normalizeValue(_value);
_value = _value.map(normalizeValue);
} else {
_value = normalizeValue(_value);
}
self[key || _header] = _value;
} }
if (utils.isPlainObject(header)) { if (utils.isPlainObject(header)) {
@@ -222,13 +216,13 @@ Object.assign(AxiosHeaders.prototype, {
return this; return this;
}, },
toJSON: function() { toJSON: function(asStrings) {
const obj = Object.create(null); const obj = Object.create(null);
utils.forEach(Object.assign({}, this[$defaults] || null, this), utils.forEach(Object.assign({}, this[$defaults] || null, this),
(value, header) => { (value, header) => {
if (value == null || value === false) return; if (value == null || value === false) return;
obj[header] = utils.isArray(value) ? value.join(', ') : value; obj[header] = asStrings && utils.isArray(value) ? value.join(', ') : value;
}); });
return obj; return obj;
+10
View File
@@ -327,5 +327,15 @@ describe('AxiosHeaders', function () {
bar: '3' bar: '3'
}); });
}); });
it('should support array values', function () {
const headers = new AxiosHeaders({
foo: [1,2,3]
});
assert.deepStrictEqual({...headers.normalize().toJSON()}, {
foo: ['1','2','3']
});
});
}); });
}); });
+30
View File
@@ -1,4 +1,5 @@
import assert from 'assert'; import assert from 'assert';
import http from 'http';
import axios from '../../../index.js'; import axios from '../../../index.js';
describe('issues', function () { describe('issues', function () {
@@ -10,4 +11,33 @@ describe('issues', function () {
assert.strictEqual(data.args.foo2, 'bar2'); assert.strictEqual(data.args.foo2, 'bar2');
}); });
}); });
describe('5028', function () {
it('should handle set-cookie headers as an array', async function () {
const cookie1 = 'something=else; path=/; expires=Wed, 12 Apr 2023 12:03:42 GMT; samesite=lax; secure; httponly';
const cookie2 = 'something-ssr.sig=n4MlwVAaxQAxhbdJO5XbUpDw-lA; path=/; expires=Wed, 12 Apr 2023 12:03:42 GMT; samesite=lax; secure; httponly';
const server = http.createServer((req, res) => {
//res.setHeader('Set-Cookie', 'my=value');
res.setHeader('Set-Cookie', [cookie1, cookie2]);
res.writeHead(200);
res.write('Hi there');
res.end();
}).listen(0);
const request = axios.create();
request.interceptors.response.use((res) => {
assert.deepStrictEqual(res.headers['set-cookie'], [
cookie1, cookie2
]);
});
try {
await request({url: `http://localhost:${server.address().port}`});
} finally {
server.close()
}
});
});
}); });