脚本标签可以获取EJS变量吗?

时间:2019-09-17 02:37:04

标签: node.js maps ejs

我正在使用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'); %>

我该如何写才能达到从后端解析的值?

谢谢!

1 个答案:

答案 0 :(得分:0)

您不能使用模板循环-它只会在服务器上循环,并生成倍增的JS代码,这不是您想要的。使用此模式:

const locations = <%- JSON.stringify(locations) %>;

然后在客户端上有一个正确的JS对象:

locations.forEach(location => {
    ...
});

(或者,如果您坚持:P,则等效的for循环)