Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用res.render并同时通过json文件发送_Javascript_Json_Node.js_Mongodb - Fatal编程技术网

Javascript 使用res.render并同时通过json文件发送

Javascript 使用res.render并同时通过json文件发送,javascript,json,node.js,mongodb,Javascript,Json,Node.js,Mongodb,我有一个express应用程序,mongoDB作为数据库,Handlebar作为服务器端模板引擎。我的应用程序中没有使用AngularJS或Ajax 在其中一个路由中,我必须呈现页面并从数据库发送json文件。然而,我无法做到这一点 这是我的“按路线”中的代码片段: router.get('/disks', function(req, res, next) { var risime; places.find({"category": "disks"}, function(er

我有一个express应用程序,mongoDB作为数据库,Handlebar作为服务器端模板引擎。我的应用程序中没有使用AngularJS或Ajax

在其中一个路由中,我必须呈现页面并从数据库发送json文件。然而,我无法做到这一点

这是我的“按路线”中的代码片段:

router.get('/disks', function(req, res, next) {

      var risime;

  places.find({"category": "disks"}, function(err, disk){
      if(err){
        throw err;
      }

      risime= disk;
      console.log(risime);  //PROPERLY LOGS THE OUTPUT

  });

  res.render('diskPage', 
    {
      'disks': risime
    });

});
在hbs中,我试图捕获它,但没有获取json数据:

  var clrisime= "{{risime}}"
  console.log(clrisime); // DOES NOT LOG ANYTHIN

我该怎么做

您的代码是异步执行的。 这意味着places.find和res.render几乎同时执行(最多10毫秒),渲染在place.find之前完成。因此,从逻辑上讲,渲染中没有数据

您必须将代码的第二部分放在第一个条件(places.find)的解析回调中,如下所示:


如果您在视图中使用{{disks}}而不是{{risime}},它将起作用。

您的代码是异步执行的。 这意味着places.find和res.render几乎同时执行(最多10毫秒),渲染在place.find之前完成。因此,从逻辑上讲,渲染中没有数据

您必须将代码的第二部分放在第一个条件(places.find)的解析回调中,如下所示:


如果您在视图中使用{{disks}}而不是{{risime}},它将起作用。

您犯了两个简单的错误:

router.get('/disks', function(req, res, next) {

  var risime;

  places.find({"category": "disks"}, function(err, disk){
      if(err){
        throw err;
      }

      risime= disk;
      console.log(risime);  //PROPERLY LOGS THE OUTPUT

      // this belongs inside your db callback
      res.render('diskPage', 
        {
          'disks': risime
          // if you call your field 'disks' here, you need to write {{disks}} in your template
        });
  });


});
  • 由于您希望在响应中使用数据库结果,因此需要将res.render放在回调中
  • 模板中的变量名和渲染对象的字段名必须相同

  • 你犯了两个简单的错误:

    router.get('/disks', function(req, res, next) {
    
      var risime;
    
      places.find({"category": "disks"}, function(err, disk){
          if(err){
            throw err;
          }
    
          risime= disk;
          console.log(risime);  //PROPERLY LOGS THE OUTPUT
    
          // this belongs inside your db callback
          res.render('diskPage', 
            {
              'disks': risime
              // if you call your field 'disks' here, you need to write {{disks}} in your template
            });
      });
    
    
    });
    
  • 由于您希望在响应中使用数据库结果,因此需要将res.render放在回调中
  • 模板中的变量名和渲染对象的字段名必须相同
  • 放置
    res.render()
    在回调内部…放置
    res.render()
    在回调内部。。。