Получение null при выборке данных в reactjs

#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);
  }, []);