2016-12-01 9 views
0

Я использовал this post в качестве руководства для создания некоторого кода NodeJS для подключения к экземпляру MongoDB, а затем вычислить разницу между двумя временными метками и затем отправьте это в шаблон nunjucks. Мой код:Рассчитайте разницу между двумя моделями от MongoDB в NodeJS и отправьте на nunjucks

app.get('/test', function(req,res){ 

    db.authenticate('USER', 'PASSWORD', function(err, result) { 
    assert.equal(true, result); 

    }); 

    db.test('TEST').find({Total_items:{$exists:true}}).forEach(function(thing) { 
    var date1 = new Date(thing.DTG_posted_UTC); 
    var date2 = new Date(thing.read_dtg); 
    var dateDiff = date1.getTime() - date2.getTime(); 


    var data = ({_id:thing._id,DTG_posted_UTC:thing.DTG_posted_UTC, read_dtg:thing.read_dtg ,dateDiff:dateDiff}); 

    }); 



    return res.render('test', data); 

    }); 

}); 

экспресс-сервер загружает нормально, но когда я посещаю «Test» страницы приложение аварии и возвращает: «ReferenceError: data1 не определен».

Я знаю, что запрос работает, так как я могу выполнить log.console результаты и работает как ожидалось (см. Ниже).

app.get('/test', function(req,res){ 

    db.authenticate('USER', 'PASSWORD', function(err, result) { 
    assert.equal(true, result); 

    }); 

    db.test('TEST').find({Total_items:{$exists:true}}).forEach(function(thing) { 
    var date1 = new Date(thing.DTG_posted_UTC); 
    var date2 = new Date(thing.read_dtg); 
    var dateDiff = date1.getTime() - date2.getTime(); 


    var data = ({_id:thing._id,DTG_posted_UTC:thing.DTG_posted_UTC,read_dtg:thing.read_dtg ,dateDiff:dateDiff}); 
    console.log(data); 
    }); 



    return res.render('test'); 

    }); 

Unfortuantly Я не могу понять, как передать результаты запроса Монго в шаблон nunjucks. Любая помощь приветствуется.

ответ

0
app.get('/test', function(req, res, next){ 
    db.authenticate('USER', 'PASSWORD', function (err, result) { 
     assert.equal(true, result); 
     // if (err) 
     //  return next(err); 

     db.test('TEST').find({Total_items:{$exists:true}}).forEach(function(thing) { 
      var date1 = new Date(thing.DTG_posted_UTC); 
      var date2 = new Date(thing.read_dtg); 
      var dateDiff = date1.getTime() - date2.getTime();   

      var data = { 
       _id: thing._id, 
       DTG_posted_UTC: thing.DTG_posted_UTC, 
       read_dtg: thing.read_dtg, 
       dateDiff: dateDiff 
      }; 

      res.render('test', data); 
     }); 
    }); 
}); 
+0

Спасибо @Aikon Mogwai. Я пробовал исправить. Сервер запускается отлично, но при посещении страницы/теста он сбой и бросает сообщение «Can not set headers after they are sent». – ColSan

+0

Я также добавил console.log (данные) перед «res.render (« test », data), и он отображает ожидаемые данные. Проблема, похоже, связана с res.render. – ColSan

+0

Если console.log печатает данные тогда проблема внутри шаблона 'test'. В шаблоне вы должны использовать' {{dateDiff}} '(не' {{data.dateDiff}} ') для разницы в печати. ​​ –