【解決方法】Typeerror: 未定義のプロパティ ‘_id’ を読み取れません

プログラミングQA


彼は、NextJS/NodeJS プロジェクトで助けが必要です。 エラーが発生しています:

TypeError: Cannot read property '_id' of undefined
    at currentInstructor (C:\Users\Sammy\Desktop\eLearn\server\controllers\instructor.js:57:30

エラーが実際にどこから発生しているのかを特定できないようです。 みんな、多分私は何かが足りないのです、それを取り出すのに助けが必要です.

私が試したこと:

以下は私のコントローラーインストラクターコードです:

import { LexRuntime } from 'aws-sdk';
import { v4 as uuidv4 } from 'uuid';
import User from '../models/user';


export const currentInstructor = async (res, req) => {
  try {
    //  1. Find user from db
    let user = await User.findById(req.user._id).select('-password').exec();

    if (!user.role.includes('Instructor')) {
      return res.sendStatus(403);
    } else {
      res.json({ ok: true });
    }
  } catch (err) {
    console.log(err);
  }
};

以下は私のルートインストラクターコードです:

import express from 'express';
const router = express.Router();
// Import Middleware
import { requireSignin, requireAuth } from '../middlewares';
// Import Controllers
import { currentInstructor } from '../controllers/instructor';

router.get('/current-instructor', requireSignin, currentInstructor);

module.exports = router;

以下は私のInstructorRouteコードです:

import { useEffect, useState } from 'react';
import axios from 'axios';
import { useRouter } from 'next/router';
import { SyncOutlined } from '@ant-design/icons';
import UserNav from '../nav/UserNav';

const InstructorRoute = ({ children }) => {
  // State
  const [ok, setOk] = useState(false);

  //   Router
  const router = useRouter();

  useEffect(() => {
    fetchInstructor();
  }, []);

  const fetchInstructor = async () => {
    try {
      const { data } = await axios.get('/api/current-instructor');
      console.log(data);
      if (data.ok) setOk(true);
    } catch (err) {
      console.log(err);
      setOk(false);
      router.push('/');
    }
  };

  return (
    <>
      {!ok ? (
        <SyncOutlined
          spin
          className='d-flex justify-content-center display-1 text-primary p-5'
        />
      ) : (
        <div className='container-fluid'>
          <div className='row'>
            <div className='col-md-2'>
              <UserNav />
            </div>
            <div className='col-md-10'>{children}</div>
          </div>
        </div>
      )}
    </>
  );
};

export default InstructorRoute;

次に、以下のコース作成ページに移動しようとしました。

import axios from 'axios';
import InstructorRoute from '../../../components/routes/InstructorRoute';

const CourseCreate = () => {
  return (
    <InstructorRoute>
      <h1 className='jumbotron text-center square'>Create Course</h1>
    </InstructorRoute>
  );
};

export default CourseCreate;

コースの作成ページに移動しようとするたびに、次のようなエラーが表示されます。

TypeError: Cannot read property '_id' of undefined
    at currentInstructor (C:\Users\Sammy\Desktop\eLearn\server\controllers\instructor.js:57:30

解決策 1

User.findById(req.user._id) を User.findById(req.auth._id) に変更するだけです

コメント

タイトルとURLをコピーしました