直到刷新为止没有数据的NodeJS应用渲染视图

时间:2018-12-13 12:42:51

标签: javascript node.js mongodb mongoose

首先,我是Java的新手,并且在脚本方面是我的爱好者。话虽这么说,我可能正在做一些非常菜鸟的事,这导致了这个问题。我正在使用Express和MongoDB构建NodeJS应用。我正在将ejs与Bootstrap 4模板一起用作我的视图引擎。这是我的问题:

routes.js用于快速路由。这是其中一条路线的示例:

router.get('/', function(req, res, next) {
  var indexData = new Promise(function(resolve, reject){
    updateIndexData((docs) => {
      return resolve(docs);
    });
  }); 

  indexData.then(function(values) {
    res.render('index', {
      data: values
    });
  });
});

简要说明一下,当用户将浏览器指向localhost:port时,.get函数将调用updateIndexData()函数,该函数使用Mongoose find()查询来收集必要的数据。然后,由于将其设置为Promise,一旦完成,它将数据传递到ejs视图,该视图在浏览器中显示数据。通过对服务器的API调用,每5分钟更新一次数据,因此我需要能够即时调用新数据。

我遇到的问题是:代码有效。它会完全按照我的需要显示数据...但是仅在刷新浏览器后才显示。初始加载时,视图将呈现,但数据完全丢失。好像在数据完成编译之前就已呈现视图,但是我对Promises的理解是这不应该发生。社区的任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

您是正确的,res.render函数仅在promise分解时运行。但是,您是否检查了“ updateIndexData”函数的返回数据?如果updateIndexData函数返回一个空字符串或未定义...

,则您描述的行为很容易发生。