Axios get in url funciona, mas com o segundo parâmetro como objeto ele não

121

Estou tentando enviar uma solicitação GET como segundo parâmetro, mas não funciona enquanto faz como url.

Isso funciona, $ _GET ['naam'] retorna o teste:

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})
      })
  }
};

Mas quando tento fazer isso, não há nada em $_GETtudo:

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 que não posso fazer isso? Nos documentos, diz claramente que é possível. Com $_POSTele também não funciona.

Sinan Samet
fonte

Respostas:

296

axios.get aceita uma configuração de solicitação como o segundo parâmetro (não parâmetros de string de consulta).

Você pode usar a paramsopção config para definir os parâmetros da string de consulta da seguinte maneira:

axios.get('/api', {
  params: {
    foo: 'bar'
  }
});
Nick Uraltsev
fonte
11
Como faço para extraí-lo do lado do servidor?
Mustafa Mamun
1
@zero_cool, você não precisa acessar os parâmetros, neste exemplo você pode acessar "foo" e ele retornará "bar"
Ashutosh Raj
Extrair no lado do servidor é um ponto importante aqui, tenho certeza que você pode usar a string foo como parâmetro para seu método no lado do servidor, mas não tenho certeza de como pegar todos os parâmetros de uma vez como objeto dentro do seu método do lado do servidor. qualquer pista? Estou tentando obter essa ajuda neste url stackoverflow.com/questions/55602990/…
Kurkula
86

No cliente:

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

No servidor:

function get(req, res, next) {

  let param = req.query.foo
   .....
}
Danikoren
fonte
1
@danikorean, podemos escrever o mesmo código do cliente sem usar o alias do método de solicitação, ou seja, em vez de axios.getusar apenasaxios({url:"url_goes_here",data:{params:{foo:'bar'}})
srbcheema1
1
Este código de servidor me economizou horas, obrigado! Para quem está se perguntando, use 'params' para a chamada .get, e não 'body', como você pode ter visto enquanto pesquisava. Você pode renomear qualquer coisa no lado do servidor se desejar, mas mantenha os parâmetros para obter o cliente.
DORRITO
axios.get('/api', { params}) ! ==axios.get('/api', params)
xgqfrms