2017-03-18 1 views
0

Javascript (ES6)를 사용하여 안정적인 API를 개발 중입니다. 코드 조각 아래에는 강사와 강좌가 두 개인 테이블이 있습니다. 나는 특정 강사가 가진 모든 과정을 보내려고 노력하고있다.각 자바 스크립트가 실행되지 않습니다.

api.get('/getCourses/:lecturer_id', (req, res) => { 
    let myCourses = []; 
    let send = true; 
    Lecturer.findById(req.params.lecturer_id, (err, lecturer) => { 
     if(err) { 
     res.json({ ok : '0'}); 
     } else { 
     lecturer.courses.forEach(value => { 
      Course.findById(value, (err, course) => { 
      console.log(value); 
      if(err) { 
       res.json({ok : '0'}); 
       send = false; 
      } else { 
       console.log('in else'); 
       console.log(course) 
       myCourses.push(course); 
       console.log(myCourses.length); 
      } 
      console.log(myCourses.length); 
      }); 
      console.log('outside1'); 
     }); 
     console.log('outside'); 
     res.json(myCourses); 
     } 
    }); 
    }); 

하지만 여기서 콘솔 "outside1"과 "outside"는 인쇄되지 않습니다. 결과적으로 "myCourses"배열은 비어있는 것을 반환합니다. 내 문제가 뭔지 설명해 주시겠습니까? 고맙습니다.

답변

0

내가 한 일을 수행하는 대신 약속을 사용하도록 제안합니다. 아래의 코드를 참조하십시오. 그것은 당신이하고있는 것과 똑같은 일을 아주 깨끗하고 우아한 방식으로합니다.

api.get('/getCourses/:lecturer_id', (req, res) => { 
    let myCourses = []; 
    let send = true; 
    Lecturer.findById(req.params.lecturer_id, (err, lecturer) => { 
     if(err) { 
     res.json({ ok : '0'}); 
     } else { 

     Promise.all(lecturer.courses.map(function(value){ 
      return Course.findById(value).exec(); 
     })).then(function(allCourses){ 
      //allCourses is array of courses 
      res.json(allCourses); 
     }).catch(function(err){ 
      //error happened while fetching courses 
     }) 
     } 
    }); 
    }); 
0

코드를 시도한 결과 작동합니다. 모델을 어떻게 정의 했습니까? 당신이 실제로

  • 확인 당신이 어떤 결과를 검색 얻을 경우, 때문에 사용하기 전에 Course.find({ '_id': { $in: lecturer.courses } })
  • 유효성을 :lecturer_id과 과정을 검색 할 수 있습니다

    • :

      // Lecturer 
      const mongoose = require('mongoose'); 
      
      const lecturerSchema = new mongoose.Schema({ 
          id: { type: 'ObjectId', unique: true }, 
          courses: [ { type: 'ObjectId', ref: 'Course' } ] 
      }); 
      
      const Lecturer = mongoose.model('Lecturer', lecturerSchema); 
      
      module.exports = Lecturer; 
      
      // Course 
      const mongoose = require('mongoose'); 
      
      const courseSchema = new mongoose.Schema({ 
          id: { type: 'ObjectId', unique: true } 
      }); 
      
      const Course = mongoose.model('Course', courseSchema); 
      
      module.exports = Course; 
      

      일부 추가 발언 : 광산이처럼 보였다 lecturernull

    • 일 수 있습니다. Mongoose Promises
  • 관련 문제