2013-08-06 97 views
3

我决定本周我想学习Node.js(我不是程序员)。到目前为止,我一直有很多的乐趣,但我现在卡住了。如何使用Node.js/Express/MongoDB将标记添加到Google地图?

我使用Express创建了一个基本应用程序。假设我有一个路线/位置。我设置了获取请求来呈现相关视图,并找到(使用Mongoose的.find方法)我的位置模型中的所有文档。我知道我可以通过文档以这样的观点:

app.get('/locations', function(req, res) { 
    Location.find({}, function(err, docs) { 
     res.render('locations/index', { 
      title: 'Locations', 
      user: req.user, 
      docs: docs 
     }); 
    }); 
}); 

然后我就可以,例如,访问结果中(玉)视图,并通过执行类似一一列举:

if(docs.length) 
    each location in docs 
     p #{location.name} is at #{location.coordinates} 

我想将所有这些位置(使用与每个“位置”一起存储的坐标)添加到Google地图。我从Google Maps API文档中使用头部中的以下脚本在视图中显示示例地图。

function initialize() { 
    var myLatlng = new google.maps.LatLng(-25.363882,131.044922); 
    var mapOptions = { 
     zoom: 4, 
     center: myLatlng, 
     mapTypeId: google.maps.MapTypeId.ROADMAP, 
    } 
    var map = new google.maps.Map(document.getElementById("map-canvas"), mapOptions); 
    var marker = new google.maps.Marker({ 
     position: myLatlng, 
     title: "Hello World!" 
    }); 
    marker.setMap(map); 
} 
google.maps.event.addDomListener(window, 'load', initialize); 

我想通标记所在的变量被创建然后设置我可以遍历我的“文档”,并创建和设置一个标记存储在我的数据库中的每个位置。也就是说,我对这个太新了,因为头脑中的脚本无法访问我传递给视图的'文档',所以我似乎无法弄清楚如何去做。

有什么建议吗?在此先感谢,非常感谢。

回答

6

I JSON.stringify()我的客户端脚本需要的任何对象,并将其作为HTML5 data-whatever属性插入。

例如:

//app.js 
app.get('/map', function(req, res){ 
    var data = { 
    id: '1234', 
    LL: { 
     lat: 42.1, 
     lng: 80.8, 
    }; 
    res.locals.docsJSON = JSON.stringify([data]); 
    res.render('locations/index'); 
}); 

//jade 
!!! 
html 
    body(data-locations=locals.docsJSON) 
    script 
    var docs = JSON.parse($('body').attr('data-locations')); 
    console.log(docs[0].LL); 
+0

谢谢你的建议,它的大加赞赏。对不起,花了很长时间才能回来接受,但现在至少已经完成了。我用你的想法,并在包含地图的div的数据属性中附加位置。一旦我浏览了数据并为每个位置创建了一个针,我就删除了数据属性。在那里没有任何敏感的东西,但它有点干净,我仍然在视图上有位置,但是在渲染地图之前创建的数组中。再次感谢! –

+0

太棒了!乐意效劳! – Plato

+0

@Plato如何在地图上添加多个标记?我需要AJAX吗?我使用HTML/EJS而不是玉石。 –

相关问题