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:
Vendored
+1
-1
@@ -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;
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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']
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -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()
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user