При использовании Express и Axios Axios не распознает запросы PUT

#node.js #postgresql #express #axios #request

#node.js #postgresql #экспресс #axios #запрос

Вопрос:

Я сократил свой вариант использования до простого теста, в котором я нажимаю кнопку, и запрос обновления отправляется с использованием API axios. Три других метода запроса — post, get и delete, все работают правильно и распознаются. Однако мой метод PUT выдает ошибку 404 Not Found, как будто я не установил метод с помощью express на своем сервере.

Это код запроса, запускаемый этим обработчиком событий (для кнопки):

 const handleUpdate = async (e, id) => {
        e.stopPropagation();
        // navigate(`/restaurants/${id}/update`);
        //update test
        try {
            const updatedRestaurant = await RestaurantFinder.put(`/${id}`, {
                name: "taco bell",
                location: "dogtown",
                price_range: "2"
              });
              console.log(updatedRestaurant);
              navigate("/");
        } catch(err) {
            console.log(err);
        }
      };
 

Это создание экземпляра api:

 import axios from "axios";

export default axios.create({
    baseURL: "http://localhost:3001/api/v1/restaurants"
    }
);
 

Это запрос в Express. Обратите внимание, что первый журнал «существует ли это ???» никогда не отображается. Адрес для запроса put на «http://localhost:3001/api/v1/restaurants/id » никогда не будет найден.

 //UPDATE a restaurant
app.put("/api/v1/restaurants/:id"), async (req, res) => {
    console.log("does this exist???");
    try {
        const results = await db.query(
          "UPDATE restaurants SET name = $1, location = $2, price_range = $3 where id = $4 returning *",
          [req.body.name, req.body.location, req.body.price_range, req.params.id]
        );
    
        res.status(200).json({
          status: "succes",
          data: {
            restaurant: results.rows[0],
          },
        });
      } catch (err) {
        console.log(err);
      }
      console.log(req.params.id);
      console.log(req.body);
};
 

Я изучил ответы на StackOverflow, думаю, на данный момент я просмотрел более 50 сообщений. Это то, что должно быть настолько простым, и все же я не могу найти ни одного ответа на это или посмотреть, где это происходит с кем-либо еще.

Если кто-нибудь, пожалуйста, поможет мне разобраться, что происходит не так, я был бы очень благодарен!

Редактировать 1 @Stephen:

 const app = express();
app.use(cors(
  {
  methods: ["POST", "GET", "DELETE", "PUT"]
}
));
app.use(express.json());
 

Поэтому я изменил его на это, но безуспешно. Первоначально я просто использовал cors(), и, насколько я понимаю, по умолчанию он разрешает метод put.

Ответ №1:

Разрешает ли ваш сервер put этот метод? Возможно, ваш сервер разрешает только другие в поле access-control-allow-methods.

См. https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Access-Control-Allow-Methods

Для тестирования через http убедитесь, что оба они установлены вашим сервером.

 Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: PUT, GET, POST, DELETE, OPTIONS
 

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

1. Спасибо за ваш ответ. Я проверю это прямо сейчас и свяжусь с вами!

2. отправьте заголовки запроса и ответа из сетевого вызова консоли разработчика. однако вычеркните свои файлы cookie.

3. Я сделаю это сейчас. я только что ответил вам, отредактировав свой пост. Это мой первый пост в stackoverflow, и я надеюсь, что я сделал это правильно…

4. @outoftheblue, что указывает ваша консоль? нет ответа, зависания или сообщения об ошибке?

5. При каждом запросе на обновление он отправляет два запроса: URL-адрес запроса: localhost: 3001 / api / v1 / restaurants / 6 Метод запроса: ПАРАМЕТРЫ Код статуса: 204 Нет содержимого Удаленный адрес: [::1]:3001 Политика ссылки: строгое происхождение при перекрестном происхождении И URL-адрес запроса: localhost: 3001/ api / v1 / restaurants / 6 Метод запроса: PUT Код состояния: 404 Не найден Удаленный адрес: [::1]:3001 Политика ссылки: строгое происхождение при перекрестном происхождении