2016-08-06 3 views
0

Я создаю приложение управления флотом, которое я настроил для моделей автомобилей и моделей, и я установил отношения «один ко многим» в моей модели базы данных.Доступ к шаблону params ejs express

Я пытаюсь представить транспортное средство сделать вместе со своими моделями, однако, это не похоже на работу, ниже код из моего файла маршрутов:

router.get("/new",function(req,res){ 
    var selectedMake; 
    Make.find({},function(err,result){ 
     if(err){ 
      console.log("an error occured while fetching the data"); 
     }else{ 
      if(req.query.id){ 
       Make.findById(req.query.id,function(err,foundMake){ 
        console.log("found the query string"); 
        selectedMake = foundMake; 
        console.log(selectedMake); 
       }) 
      } 
      res.render("vehicles/newvehiclemake",{makes:result,selected: selectedMake});   
     } 
    }) 

}); 

и вот код, где я пытаюсь получить доступ к переменной «выбран» в моих .ejs файл

<div class="row"> 
    <div class="col-md-9 col-md-offset-3"> 
     <table class="table table-striped"> 
       <tr> 
        <th>Available Models</th> 
       </tr> 
       <% if(selected) { %> 
       <% selected.models.forEach(function(model){ %> 
       <tr><td><%= model.name %></td></tr> 
       <% }) %> 
       <% }else { %> 
       <tr><td>No Models available for the selected Make</td></tr> 
       <% } %> 
     </table> 
    </div> 
</div> 

ветвь, где выбран должен быть выполнен никогда не достигается, и всегда я получить не Модели доступны для выбранного Сделать

любые подсказки?

ответ

0

Я думаю, что это потому, что ваш метод Make.findById является звонком asynchronous. Итак, ваш обратный вызов function(err,foundMake) вызывается после res.render

Переведите вызов рендера в функцию обратного вызова, тогда он должен работать.

 if(req.query.id){ 
      Make.findById(req.query.id,function(err,foundMake){ 
       console.log("found the query string"); 
       selectedMake = foundMake; 

       // after the findById call finished, now it has value. 
       console.log(selectedMake); 

       // res.render should be called at this moment. 
       res.render("vehicles/newvehiclemake",{makes:result,selected: selectedMake}); 
      }) 

      // you would see this line is called before the data is ready. 
      console.log(selectedMake); 

     } 
+0

Спасибо, мой дорогой, он сработал! – Abdallah

Смежные вопросы