【问题标题】:accessing template params ejs express访问模板参数 ejs express
【发布时间】:2016-08-06 19:15:11
【问题描述】:

我正在创建车队管理应用程序,我已经设置了车辆的品牌和型号,并且我已经在我的数据库模型中建立了一对多的关系。

我正在尝试展示车辆及其型号,但是,它似乎不起作用,下面是我的路线文件中的代码:

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 文件中访问变量“selected”的代码

<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>

永远不会到达应执行 selected 的分支,并且总是我得到 No Models available for the selected Make

有什么线索吗?

【问题讨论】:

    标签: node.js express ejs


    【解决方案1】:

    我认为这是因为您的 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);
    
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      • 2015-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多