Axios get in url funciona pero con el segundo parámetro como objeto no

121

Estoy tratando de enviar una solicitud GET como segundo parámetro, pero no funciona mientras lo hace como url.

Esto funciona, $ _GET ['naam'] devuelve la prueba:

export function saveScore(naam, score) {
  return function (dispatch) { 
    axios.get('http://****.nl/****/gebruikerOpslaan.php?naam=test')
      .then((response) => {
        dispatch({type: "SAVE_SCORE_SUCCESS", payload: response.data})
      })
      .catch((err) => {
        dispatch({type: "SAVE_SCORE_FAILURE", payload: err})
      })
  }
};

Pero cuando intento esto, no hay nada en $_GETabsoluto:

export function saveScore(naam, score) {
  return function (dispatch) { 
    axios.get('http://****.nl/****/gebruikerOpslaan.php',
    {
        password: 'pass',
        naam: naam,
        score: score
    })
      .then((response) => {
        dispatch({type: "SAVE_SCORE_SUCCESS", payload: response.data})
      })
      .catch((err) => {
        dispatch({type: "SAVE_SCORE_FAILURE", payload: err})
      })
  }
};

¿Por qué no puedo hacer eso? En los documentos dice claramente que es posible. Con $_POSTeso tampoco funciona.

Sinan Samet
fuente

Respuestas:

298

axios.get acepta una configuración de solicitud como segundo parámetro (no parámetros de cadena de consulta).

Puede usar la paramsopción de configuración para configurar los parámetros de la cadena de consulta de la siguiente manera:

axios.get('/api', {
  params: {
    foo: 'bar'
  }
});
Nick Uraltsev
fuente
11
¿Cómo lo extraigo del lado del servidor?
Mustafa Mamun
1
@zero_cool no necesita acceder a los parámetros, aquí con un ejemplo, puede acceder a "foo" y devolverá "bar"
Ashutosh Raj
La extracción en el lado del servidor es un punto importante aquí, estoy seguro de que puede usar la cadena foo como parámetro para su método en el lado del servidor, pero no estoy seguro de cómo tomar todos los parámetros a la vez como objeto dentro de su método del lado del servidor. ¿Cualquier pista? Estoy tratando de obtener esta ayuda de esta URL stackoverflow.com/questions/55602990/…
Kurkula
86

En cliente:

  axios.get('/api', {
      params: {
        foo: 'bar'
      }
    });

En el servidor:

function get(req, res, next) {

  let param = req.query.foo
   .....
}
danikoren
fuente
1
@danikorean, ¿podemos escribir el mismo código de cliente sin usar el alias del método de solicitud, es decir, en lugar de axios.getusar solo?axios({url:"url_goes_here",data:{params:{foo:'bar'}})
srbcheema1
1
Este código de servidor me ahorró horas, ¡gracias! Para cualquiera que se pregunte, quédese con 'params' para la llamada .get, y no con 'body' como puede haber visto mientras buscaba. Puede cambiarle el nombre en el lado del servidor si lo desea, pero mantenga los parámetros para que el cliente obtenga.
DORRITO
axios.get('/api', { params}) ! ==axios.get('/api', params)
xgqfrms