我正在制作第一个node / express / mongo / handlebars项目,并且在HTML输出端方面苦苦挣扎。我确实做了短暂的工作,但是在开发代码时却遇到了一些麻烦。
我不确定我是否只是在弄乱最初的输出,是否在寻找有关如何最好地解决问题的建议,或者这是否是一个简单的错误。我已经毫无问题地将条目添加到了mongo中,并且可以正常获取数据,但是无法始终如一地输出结果。
router.get('/:chanName', function(req, res, next) {
if (req.params.chanName != 'add') {
let myData = {};
MongoClient.connect(url, { useNewUrlParser: true }, (err, client) => {
if (err) { return console.log('Unable to connect to MongoDB'); }
//get result from db
client.db('tube').collection('channel-reviews').find({'channel': req.params.chanName}).toArray(function(err, result) {
if (err) throw err;
myData = result[0];
// myData is populated object here
});
// myData is empty object here
client.close();
res.render('review');
});
} else {
res.render('add');
}
});
URL用作参数来检索mongo条目,然后我尝试使用以下模板将其呈现为列表
<ul>
<li>{{ myData.channel }}</li>
<li>{{ myData.chanURL }}</li>
<li>{{ myData.score }}</li>
<li>{{ myData.title }}</li>
<li>{{ myData.content }}</li>
</ul>
我只是把东西放错了位置还是更基本的东西(例如在可以检索和处理数据之前很长时间执行了最终代码)并且需要使用Promises等?
答案 0 :(得分:7)
如https://expressjs.com/en/api.html#res.render所述 res.render()函数将视图的局部变量作为第二个参数,因此您需要将对象传递给函数res.render()
按照模板操作,函数调用就像
sap.ui.define([
"sap/ui/core/UIComponent",
"sap/ui/model/json/JSONModel",
"tmp/Zprojetyoussra/controller/Dialog" ,
"sap/ui/Device"
], function (UIComponent, JSONModel, Dialog, Device) {
"use strict";
return UIComponent.extend("tmp.Zprojetyoussra.Component", {
metadata: {
// rootView: "tmp.Zprojetyoussra.view.tesstview"
manifest: "json"
},
如果mydata对象具有所有这些属性(通道等),则此方法对您的模板应该可以正常工作。另外,请确保仅在回调函数中正确填充对象的位置调用该函数。
旁注: 我希望下面的代码只是为了使模板看起来更整洁
res.render('review',{myData:myData});
,模板为
res.render('review',{channel:mydata.channel,chanURL:mydata.chanURL,score:mydata.score,title:mydata.title,content:mydata.content});