Axios get in url działa, ale z drugim parametrem jako obiektem nie działa

121

Próbuję wysłać żądanie GET jako drugi parametr, ale nie działa, gdy działa jako adres URL.

To działa, $ _GET ['naam'] zwraca test:

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

Ale kiedy próbuję tego, w ogóle nic nie ma $_GET:

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

Dlaczego nie mogę tego zrobić? W dokumentach jasno mówi się, że jest to możliwe. Z $_POSTtym też nie działa.

Sinan Samet
źródło

Odpowiedzi:

298

axios.get akceptuje konfigurację żądania jako drugi parametr (nie parametry ciągu zapytania).

Możesz użyć paramsopcji config, aby ustawić parametry ciągu zapytania w następujący sposób:

axios.get('/api', {
  params: {
    foo: 'bar'
  }
});
Nick Uraltsev
źródło
11
Jak wyodrębnić go po stronie serwera?
Mustafa Mamun
1
@zero_cool nie musisz mieć dostępu do parametrów, tutaj przykład w ramach przykładu możesz uzyskać dostęp do „foo” i zwróci „bar”
Ashutosh Raj
Wyodrębnianie po stronie serwera jest tutaj ważną kwestią, jestem pewien, że możesz użyć ciągu foo jako parametru dla swojej metody po stronie serwera, ale nie jestem pewien, jak pobrać wszystkie parametry naraz jako obiekt wewnątrz metody po stronie serwera. jakaś wskazówka? Próbuję uzyskać pomoc z tego
adresu
86

Na kliencie:

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

Na serwerze:

function get(req, res, next) {

  let param = req.query.foo
   .....
}
danikoren
źródło
1
@danikorean, czy możemy napisać ten sam kod klienta bez użycia aliasu metody żądania, czyli zamiast axios.getużywać tylkoaxios({url:"url_goes_here",data:{params:{foo:'bar'}})
srbcheema1
1
Ten kod serwera zaoszczędził mi wiele godzin, dziękuję! Dla każdego, kto się zastanawia, trzymaj się „params” dla połączenia .get, a nie „body”, jak mogłeś zauważyć podczas wyszukiwania. Jeśli chcesz, możesz zmienić dowolną nazwę po stronie serwera, ale zachowaj parametry dla klienta.
DORRITO
axios.get('/api', { params}) ! ==axios.get('/api', params)
xgqfrms