Javascript 使用res.render并同时通过json文件发送
我有一个express应用程序,mongoDB作为数据库,Handlebar作为服务器端模板引擎。我的应用程序中没有使用AngularJS或Ajax 在其中一个路由中,我必须呈现页面并从数据库发送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
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
});
});
});
你犯了两个简单的错误:
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()
在回调内部。。。