Cuerpos de solicitud codificados como URL

Por defecto, axios serializa objetos JavaScript a JSON. Para enviar data en un formato distinto a application/x-www-form-urlencoded, puedes usar una de las siguientes opciones.

En un navegador, puedes usar el API URLSearchParams de la siguiente manera:

const params = new URLSearchParams();
params.append('param1', 'value1');
params.append('param2', 'value2');
axios.post('/foo', params);

Nota que URLSearchParams no es soportado por todos los navegadores (ver caniuse.com), pero hay un polyfill disponible (asegurate de usar polyfill en el ambiente global).

Alternativamente, puedes codificar data usando la librería qs:

const qs = require('qs');
axios.post('/foo', qs.stringify({ 'bar': 123 }));

O de otra manera (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

En node.js, puedes usar el modulo querystring de la siguiente manera:

const querystring = require('querystring');
axios.post('http://something.com/', querystring.stringify({ foo: 'bar' }));

O 'URLSearchParams' del 'modulo url' de esta manera:

const url = require('url');
const params = new url.URLSearchParams({ foo: 'bar' });
axios.post('http://something.com/', params.toString());

También puedes usar la librería qs.

NOTA

La librería qs es preferida si necesitas un stringify de objetos anidados, ya que el método querystring tiene problemas conocidos con ese caso de uso (https://github.com/nodejs/node-v0.x-archive/issues/1665).

Form data

En node.js, puedes usar la librería form-data de la siguiente manera:

const FormData = require('form-data');
 
const form = new FormData();
form.append('my_field', 'my value');
form.append('my_buffer', new Buffer(10));
form.append('my_file', fs.createReadStream('/foo/bar.jpg'));

axios.post('https://example.com', form, { headers: form.getHeaders() })

Alternativamente, usa un interceptor:

axios.interceptors.request.use(config => {
  if (config.data instanceof FormData) {
    Object.assign(config.headers, config.data.getHeaders());
  }
  return config;
});