Phần thân URL-Encoding
Theo mặc định, axios tuần tự hóa đối tượng Javascript thành JSON
. Thay vào đó, để gửi dữ liệu theo định dạng application/x-www-form-urlencoded
, bạn có thể sử dụng một trong các lựa chọn sau đây.
Trình duyệt
Trong trình duyệt, bạn có thể sử dụng URLSearchParams
API như sau:
const params = new URLSearchParams();
params.append('tham-số-1', 'giá-trị-1');
params.append('tham-số-2', 'giá-trị-2');
axios.post('/foo', params);
Lưu ý rằng không phải trình duyệt nào cũng hỗ trợ
URLSearchParams
(xem caniuse.com), nhưng có một polyfill sẵn dùng đây (hãy đảm bảo là polyfill cho môi trường toàn cục)
Hoặc là bạn có thể biên mã dữ liệu bằng thư viện qs
:
const qs = require('qs');
axios.post('/foo', qs.stringify({ 'bar': 123 }));
Hoặc là theo cách khác nữa (ES6),
import qs from 'qs';
const data = { 'bar': 123 };
const options = {
method: 'POST',
headers: { 'content-type': 'application/x-www-form-urlencoded' },
data: qs.stringify(data),
url,
};
axios(options);
Node.js
Query string
Trong node.js, bạn có thể sử dụng module querystring
như sau:
const querystring = require('querystring');
axios.post('http://cái-gì-đó.com/', querystring.stringify({ foo: 'bar' }));
hoặc 'URLSearchParams' từ module 'url' như sau:
const url = require('url');
const params = new url.URLSearchParams({ foo: 'bar' });
axios.post('http://cái-gì-đó.com/', params.toString());
Bạn còn có thể sử dụng thư viện qs
.
LƯU Ý: Nếu bạn cần string-hóa các đối tượng lồng nhau thì tốt nhất hãy dùng thư viện qs
, vì phương thức querystring
có vấn đề đã ghi nhận đối với use case đó (https://github.com/nodejs/node-v0.x-archive/issues/1665).
Form data
Trong node.js, bạn có thể sử dụng thư viện form-data
như sau:
const FormData = require('form-data');
const form = new FormData();
form.append('field_của_tôi', 'giá trị của tôi');
form.append('buffer_của_tôi', new Buffer(10));
form.append('file_của_tôi', fs.createReadStream('/foo/bar.jpg'));
axios.post('https://example.com', form, { headers: form.getHeaders() })
Hoặc là sử dụng một bộ đón chặn:
axios.interceptors.request.use(config => {
if (config.data instanceof FormData) {
Object.assign(config.headers, config.data.getHeaders());
}
return config;
});