Я чувствую, что это должен быть дубликат ... Если это так, я не нахожу нужную ветку.
У меня есть Express API (использующий mongoose) на сервере с интерфейсом React. API должен вернуть клиенту JSON.
Проблема: он отлично работает с Postman, но возвращает неправильный JSON в React
То, что я отправляю в Postman (это дает правильный ответ):
{"fileHashValue"
:
"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"}
Код сервера:
app.get("/userData", function(req, res) {
const fileHashValue = req.body.fileHashValue;
UserData = UserData.findOne(
{
fileHashValue
},
function(err, userdata) {
res.json({
userdata
});
}
);
});
Код клиента:
componentDidMount() {
axios
.get(
"http://ec2-52-53-190-3.us-west-1.compute.amazonaws.com:3000/userData",
{
fileHashValue:
"e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
}
)
.then(res => {
console.info(res.data);
});
}
Кажется, что все это должно работать, но он отвечает, как будто я отправил пустой запрос. IE, если я отправлю пустой запрос в Postman, он даст мне тот же результат, что и я вхожу в React. Любая помощь приветствуется, спасибо!





Функция axios.get() ожидает конфигурацию запроса в качестве второго параметра (не ваших исходных параметров).
Вы можете установить свои параметры следующим образом:
axios.get("http://ec2-52-53-190-3.us-west-1.compute.amazonaws.com:3000/userData", {
params: {
fileHashValue: "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
}
})
.then(res => {
console.info(res.data);
});
Более подробное объяснение: https://flaviocopes.com/axios/#get-requests
Как упоминалось в другом ответе, использование глагола get может не соответствовать вашим потребностям. Get в основном используется для получения ресурса и не может содержать тело. Использование post может предотвратить это. Сообщение в основном используется для создания ресурса и может иметь тело:
axios.post("http://ec2-52-53-190-3.us-west-1.compute.amazonaws.com:3000/userData", {
params: {
fileHashValue: "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
}
})
.then(res => {
console.info(res.data);
});
Если ваша цель действительно состоит в том, чтобы просто получить элемент, я предлагаю изменить архитектуру маршрутов, включив идентификатор, который вы пытаетесь получить в URL-адресе:
axios.get("http://ec2-52-53-190-3.us-west-1.compute.amazonaws.com:3000/userData/e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", {})
.then(res => {
console.info(res.data);
});
И адаптируйте свой бэкэнд:
app.get("/userData/:id", function(req, res)
После этого идентификатор будет доступен в req.params.id.
Странно, вы можете распечатать, что находится в вашей переменной req.body на сервере?
Кроме того, что печатается в сетевой части консоли вашего браузера после отправки запроса?
postman возвращает e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852 b855 react возвращает "undefined" Спасибо за вашу помощь, мне нужно уйти к чему-то другому на несколько часов, хорошего дня :)
это когда я добавляю console.info(req.body.fileHashValue) в свой серверный код
Хорошо, понятно, не могли бы вы показать мне, как выглядит сетевая консоль вашего браузера после отправки вашего запроса
Консоль браузера регистрирует create_date: "2018-12-16T11:34:42.703Z" myID: "b2092b3e6f270099fe4433a67e9f32dedf19fb6a1de2a0229da2" __v: 0 _id: "5c16385222e88522785c9758". Это запись в базе данных. Это та же запись, которую вы получите, если отправите пустой запрос почтальону.
Хорошо, я обновил свой пост, скажите, если у вас все еще есть проблемы
Спасибо за ответ :) Надеюсь, это будет хорошая тема, поскольку теперь она содержит два способа решения этой проблемы. Как я уже сказал, ни одно из руководств, за которыми я следил (несколько), не рассматривало эти нюансы, поэтому я уверен, что другие новички могут столкнуться с аналогичными проблемами.
Добро пожаловать, рад, что это могло кому-то помочь. Ну знаешь, я сам никогда не пользовался аксиом, мы тут все новички
Согласно инструкциям в этом потоке, не рекомендуется использовать .get (на самом деле, вообще). Как новичок, я никогда не припомню, чтобы в каких-либо обучающих материалах упоминалось об этом.
Ответ на вопрос - переключить логику клиента и сервера на axios.post и отправить json, как показано в исходном сообщении.
Спасибо за ответ. К сожалению, здесь отображается тот же журнал, что и в исходном вопросе.