#node.js #reactjs #express #mongoose #fetch-api
#node.js #reactjs #экспресс #мангуст #fetch-api
Вопрос:
Я хочу получить подробную информацию об одном ученике, для которого я написал метод. Он работает с postman, но не работает, когда я подключаю его к интерфейсу
интерфейс-контроллер для получения сведений об ученике
export const getStudent = (studentId, token) => {
return fetch(`${API}/student/${studentId}`, {
method: "GET",
headers: {
Accept: "application/json",
Authorization: `Bearer ${token}`,
},
})
.then((response) => {
return response.json();
})
.catch((err) => console.log(err));
};
установка значений
const [student, setStudent] = useState({
fullName: "",
admissionNumber: "",
rollNumber: "",
age: "",
gender: "",
faculty: "",
email: "",
});
const preload = (studentId) => {
getStudent(user._id, token, studentId).then((student) => {
if (student?.error) {
setStudent(console.log(student.error));
} else {
setStudent(student);
}
});
};
useEffect(() => {
preload();
}, []);
серверная часть
exports.getStudent = (req, res) => {
return res.json(req.student);
};
Комментарии:
1. Здесь что-то не складывается. Вы определяете
getStudent
ожидание двух параметров,studentId
иtoken
. Затем вы определяетеpreload
ожидание одного параметра,studentId
. ЗатемuseEffect
вы вызываетеpreload
без указания каких-либо параметров (studentId
будетundefined
).preload
Затем вы вызываетеgetStudent
с 3 параметрами (он ожидает только 2). Первый передаваемый вами параметр — это идентификатор пользователя, в то время как функция ожидает идентификатор студента. Второй параметр выглядит правильно. Я не уверен, что здесь происходит, но я предлагаю сначала исправить ваши параметры.2. Это работает…. Большое спасибо за ответ. Вы правильно поняли.
Ответ №1:
Обновленный код
const preload = (studentId) => {
getStudent(studentId, token).then((data) => {
if (data.error) {
setStudent(console.log(data.error));
} else {
setStudent(student);
}
});
};
для предварительной загрузки требуется только два параметра userid и token
В useEffect ему необходимо передать StudentID для получения подробной информации
useEffect(() => {
preload(match.params.studentId);
}, []);