不能将EJS变量推入html脚本标签中的数组?

时间:2017-10-19 12:59:49

标签: arrays node.js mongodb variables ejs

我正在尝试构建一个带有一些测试坐标的数组,以便与OpenLayers Overlays一起使用。

这是代码:

select * from `items` where `title` like ? and `published` = ? and (`alias` like ? or `description` like ?) or exists (select * from `categories` where `items`.`category_id` = `categories`.`id` and `title` like ?) or exists (select * from `countries` where `items`.`country_id` = `countries`.`id` and `name` like ?) limit 5 offset 0

重要提示:在我的app.js文件中,coords被定义为一个对象数组(我在mongodb中找到({}))。

我真的被困在这里请帮忙! 谢谢! :DDD

2 个答案:

答案 0 :(得分:0)

您的变量i存在于客户端JS中,而不是存在于服务器端JS中。

有各种方法可以解决这个问题,其中一种方法是:

var parada = <%- JSON.stringify(coords.map(function(pair) {
    return [pair.lon, pair.lat];
})) %>;

我假设lonlat总是数字,这样就不存在注射攻击的风险。

或者,您可以在调用模板之前进行转换,将复杂性保留在模板本身之外。

顺便说一下,你在lenght中也有拼写错误。

答案 1 :(得分:0)

进行了更改,以便在客户端使用数据更容易。

var lon = [];
    var lat = [];
    for (var i = 0; i < <%=lon.length%>; i++ ) {<%for(var x = 0; x < lon.length ;x++) { %> 
        lon.push(<%= lon[x] %>);
        lat.push(<%= lat[x] %>);
    <% } %>}

这样我就可以在客户端使用EJS构建一个数组。

//Create the Overlays Array
    var overlays = [];

    for (var i = 0; i < <%=lon.length%>; i++ ) {
        overlays.push(new ol.Overlay({
            position: ol.proj.fromLonLat([lon[i], lat[i] ]),
            positioning: 'center-center',
            element: document.getElementById('parada' + i),
            stopEvent: false
        }));
    }

然后我可以在任何需要的地方使用这个数组。

感谢@skirtle的帮助,你让我了解了这个问题;)