我正在使用NodeJS后端和EJS构建一个应用程序。我想创建带有一些标记的地图。这些标记是数据库中城市和国家的一些名称。我的问题是:我可以以某种方式将EJS <%=%>用作脚本标签吗?我做了一些事情,但是我的IDE抛出一个错误。如果可以的话,请告诉我如何?
这是我的功能:
NODE JS
exports.getMap = (req,res,next) => {
const notename = req.params.notename;
Note.findOne({notename:notename}).then(note => {
res.render('feed/map', {
pageTitle:'Pedigree Notes | MAP',
path:'/getmap',
locations:note.locations
});
})
}
和客户端
<%- include('../includes/head.ejs'); %>
<%- include('../includes/navigation.ejs');%>
<main>
<div class="container-fluid">
<div id="map">
</div>
</div>
<script>
var map;
var geocoder;
function initMap(){
var mapLayer = document.getElementById('map')
var centerCoordinates = new google.maps.LatLng(40.4637, 3.7492);
var defaultOptions = { center:centerCoordinates, zoom:2};
map = new google.maps.Map(mapLayer,defaultOptions);
geocoder = new google.maps.Geocoder();
<% for(let location of locations) { %>
<% } %>
}
</script>
<script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyC8QqwujgKgEaAk2_MvUph9Jows_P1eILs&callback=initMap"
async defer></script>
</main>
<%- include('../includes/end.ejs'); %>
我该如何写才能达到从后端解析的值?
谢谢!
答案 0 :(得分:0)
您不能使用模板循环-它只会在服务器上循环,并生成倍增的JS代码,这不是您想要的。使用此模式:
const locations = <%- JSON.stringify(locations) %>;
然后在客户端上有一个正确的JS对象:
locations.forEach(location => {
...
});
(或者,如果您坚持:P,则等效的for
循环)