访问模板参数 ejs express
accessing template 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 文件中的变量 "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>
永远不会到达应该执行所选内容的分支,而且我总是得到所选品牌没有可用的模型
有什么线索吗?
我认为这是因为您的 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);
}
我正在创建车队管理应用程序,我已经为车辆的品牌和型号进行了设置,并且已经在我的数据库模型中建立了一对多关系。
我正在尝试展示车辆制造及其模型,但是,它似乎不起作用,下面是我的路线文件中的代码:
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>
永远不会到达应该执行所选内容的分支,而且我总是得到所选品牌没有可用的模型
有什么线索吗?
我认为这是因为您的 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);
}