#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 Политика ссылки: строгое происхождение при перекрестном происхождении