Как заставить Axios post вызывать экспресс-параметризованный маршрут?

#javascript #node.js #reactjs #express #react-hooks

#javascript #node.js #reactjs #экспресс #реагирующие хуки

Вопрос:

Итак, я получил экспресс-маршрут

 router.post('/:makeamp;:modelamp;:year', function (req, res) {  
  const newCar = {
    make: req.params.make,
    model: req.params.model,
    year: req.params.year
  }
  Car.create(newCar);
  res.send(newCar);}); 
 

Итак, это работает выше, используя postman

http://localhost:8000/buildings/Audiamp;A4amp;2018

Я хочу знать, как сообщение Axios войдет в функциональный компонент react. Вот что у меня есть, но это не попадает в маршрут в express.

 const [carFetch, setFetch] = useState('');
const postAxios = async () => {
    const payload = { make: 'Audi', model: 'A4', year: 2018 };
    const { data } = await axios.post('http://localhost:1337/cars/', payload);
    setFetchedData(data);
};

 

Но это не работает.

~ SRJ

Комментарии:

1. Использовать URLSearchParams . Например. const params = new URLSearchParams(payload); и затем передать это в axios? — Кроме того, я не думаю, что вы хотите использовать .post ? Вы, вероятно, используете .get вместо этого.

2. Правильный пример помог бы лучше. Это почтовый звонок в экспресс.

3. Что бы вы хотели объяснить? Я сделал предложение, которого недостаточно для ответа.

4. Где и как использовать URLSearchParams в приведенном выше сценарии?

5. На самом деле, если вы используете .get , вы, вероятно, можете просто передать объект в качестве свойства конфигурации. axios.get('http://localhost:1337/cars', { params: payload }) ?

Ответ №1:

Не уверен, чего мы пытаемся достичь здесь, но вот решение: учитывая, что ваши параметры в express спроектированы так, как они есть, нам нужно передавать аргументы как строковый объект:

 const [carFetch, setFetch] = useState('');
const postAxios = async () => {
const payload = `Auditamp;A4amp;2018`;
    const url = `http://localhost:1337/cars/${payload}`;
    const { data } = await axios.post(url); 
    setFetchedData(data);
};
 

Это должно попасть в экспресс-URL и должно вызвать post-вызов.

Ответ №2:

Если запрос не попадает в обработчик экспресс-маршрута, должна возникнуть проблема с сопоставлением URL.

И если вы отправляете запрос так, как показано в примере кода react, вам следует искать данные в объекте req.body в обработчике маршрута.