【发布时间】: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 将起作用并在其部门字段中返回具有该值的课程