#reactjs #express #mongoose #axios #mongoose-schema
#reactjs #экспресс #mongoose #axios #mongoose-schema
Вопрос:
Я создаю приложение, в котором пользователи могут размещать сообщения в блогах на домашней странице. Прямо сейчас я работаю только над получением сообщений, которые не принадлежат зарегистрированному пользователю. Вот запросы axios во внешнем интерфейсе:
//Get user token
getUser() {
const token = this.props.location.state.token;
if (token) {
this.setState({ token: token });
Axios.get('http://localhost:3000/api/posts', {
headers: {
'auth-token': token,
},
})
.then((res) => {
this.setState({ id: res.data._id });
this.getPosts(res.data._id);
})
.catch((err) => {
console.log(err);
throw err;
});
}
}
//Get specific posts
getPosts(id) {
Axios.get(`http://localhost:3000/api/posts/all/${id}`)
.then((res) => {
console.log(res);
this.setState({ posts: res.data });
})
.catch((err) => {
console.log(err.message);
throw err;
});
}
componentDidMount() {
this.getUser();
}
Функция getToken() успешно получает правильного пользователя и соответствующий идентификатор. Затем я передаю идентификатор своей функции getPosts, которая отправляет запрос get на этот маршрут на серверной части:
// GET POSTS FROM OTHER USERS
router.get('/all/:id', async (req, res) => {
try {
console.log('GET POSTS FROM OTHER USERS');
console.log(req.params);
const user = await User.find({ _id: req.params });
console.log(user);
const posts = await Post.find({ email: { $ne: user[0].email } });
console.log(posts);
res.send(posts);
} catch (err) {
res.send(err);
}
});
Оба console.log(‘ПОЛУЧАТЬ СООБЩЕНИЯ ОТ ДРУГИХ ПОЛЬЗОВАТЕЛЕЙ’) и console.log (req.params) запускаются и печатаются в моем терминале, но больше ничего не происходит с поиском пользователя и поиском сообщений. Когда я консольно регистрирую ответ во внешнем интерфейсе, я получаю следующее:
Почему я не получаю никаких данных в своем ответе? Я знаю, что я попадаю на маршрут, и запросы mongoose написаны правильно. Есть ли какое-то асинхронное поведение, которого мне не хватает?
Ответ №1:
const user = await User.find({ _id: req.params });
req.params
это объект, и вам нужно извлечь идентификатор, который вы хотите передать в свой запрос.
Вот пример того, как разрушить ваш объект. Возможно, вам потребуется настроить назначение в соответствии с именем свойства.
const { id } = req.params;