【问题标题】:No HTML output using Express to output MongoDB results没有使用 Express 输出 MongoDB 结果的 HTML 输出
【发布时间】:2019-08-07 10:34:45
【问题描述】:

我正在制作第一个 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 等?

【问题讨论】:

  • 你用的是哪个模板引擎,我猜是ejs吧?
  • 使用的模板引擎是Handlebars

标签: javascript node.js express ejs


【解决方案1】:

https://expressjs.com/en/api.html#res.render 所述 res.render() 函数将视图的局部变量作为第二个参数,因此您需要将对象传递给函数 res.render()

按照模板,函数调用会是这样的

res.render('review',{myData:myData});

如果 mydata 对象具有所有这些属性(通道等),这应该适用于您的模板。还要确保仅在回调函数中调用此函数,在您说对象已正确填充的位置。

旁注: 我更喜欢下面的代码只是为了使模板看起来更整洁

res.render('review',{channel:mydata.channel,chanURL:mydata.chanURL,score:mydata.score,title:mydata.title,content:mydata.content});

和模板一样

<ul>
    <li>{{ channel }}</li>
    <li>{{ chanURL }}</li>
    <li>{{ score }}</li>
    <li>{{ title }}</li>
    <li>{{ content }}</li>
</ul>

【讨论】:

  • 非常感谢,已经把它变成了一个合适的 Git 存储库,这样我就可以回滚并避免将来出现类似的错误
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-17
  • 2014-07-06
  • 2019-08-05
相关资源
最近更新 更多