【问题标题】:cannot read properties of undefined "_id"无法读取未定义“_id”的属性
【发布时间】:2022-01-10 08:50:27
【问题描述】:

所以我是 node.js 的新手,我一直在做一个迷你项目,一个学生门户网站,我只能根据学生的部门和水平来展示相关的课程。

student.js

var express = require('express');
var router = express.Router();
const {ensureAuthenticated} = require('../config/auth.js');
const {Student}= require('../models/schema.js');
var axios = require('axios');
var controller = require('../controller.js');

router.get('/register-courses',ensureAuthenticated,function(req, res, next) {
axios.get('http://localhost:3000/student/available-courses')
.then(
 (response)=>{
   console.log(response.data)
   res.render('register-courses',{courses:response.data});
 })
.catch(err=>{
 console.log(err);
}) 
});
router.get('/available-courses', controller.getCourse);

module.exports = router;

我将问题缩小到 req.user 条件,如果我删除它会呈现所有课程

controller.js

var {Course} = require ('./models/schema.js');
var {Student} = require ('./models/schema.js');

exports.getCourse = (req,res) =>{ 

const user = Student.findById(req.user._id); //problem is i cant access currently logged in user
console.log(user);
Course.find({departmentsOffering:user.department, level:user.level})
.then(items=>{
    res.send(items)
})
.catch(
    err=>{
        console.log(err);
    }
)
}

【问题讨论】:

  • 您对如何调用事物的误解,您不应该使用 axios 调用 self 从不同的中间件中调用模型,重组以便 getCourse 返回它需要的内容而不是 res.send 然后您可以使用它在任何地方
  • 对不起,我没有真正关注,你说我应该重组 getCourse 以返回它需要的东西,但我似乎无法从它内部访问 req.user。它应该返回与当前用户具有相同部门值和级别值的课程。如果我将 course.find 中的条件更改为“部门提供:'计算机科学'”,API 将起作用并在其部门字段中返回具有该值的课程

标签: node.js mongodb express


【解决方案1】:

我认为这是因为您忘记在路由声明中添加 ensureAuthenticated 中间件。

声明应该是

router.get('/available-courses', ensureAuthenticated, controller.getCourse);

【讨论】:

    猜你喜欢
    • 2017-06-15
    • 2022-07-27
    • 2013-09-03
    • 2022-09-23
    • 2019-09-13
    • 1970-01-01
    • 1970-01-01
    • 2020-11-22
    • 2014-12-24
    相关资源
    最近更新 更多