将数组从 NodeJS 服务器传递到客户端?

Ash*_*ina 3 javascript arrays google-maps google-maps-api-3 node.js

学习自己制作一个网站。我之前在使用单个对象时遇到过这个问题,但我能够使其工作并在客户端拾取该对象并使用它。但是,现在我尝试将位置数组发送到客户端,以便将它们作为标记呈现在 google 地图 api 上(它们将 placeID 存储在 JSON 中)。根据我读过的线程,无法像对象一样发送数组,但我遵循了其他人的建议,但无济于事。我有一些测试位置,我已经制作了一个数组,但是当我尝试在客户端拾取它时,我只是得到“SyntaxError:missing:after property id”和“ReferenceError:cityList is not Defined”,这使得感知 cityList 是否有问题。

服务器:

var express = require('express');
var router = express.Router();

/* GET users listing. */
router.get('/', function(req, res) {
    var yourCities =  ["stockholm", "moscow", "barcelona", "bordeaux", "helsinki", "london"];
    var cityList = yourCities.reduce(function(cityList, city) {
        cityList.push(require('../public/cityData/' + city))
        return cityList;
    }, [])

    //TODO::need to update this to send an array
    res.render('map', {
        cityList : JSON.stringify(cityList),
    });
});

module.exports = router;
Run Code Online (Sandbox Code Playgroud)

尝试获取 cityList 客户端并将其制作为标记,标记代码基本上是直接从 Google 的 API 指南复制的。

  <script>
      var cityList = <%- cityList %>;
  </script>
  <script>
    function initMap() {
      var map = new google.maps.Map(document.getElementById('map'), {
        center: {lat: 41.9028, lng: 12.4964},
        zoom: 3
      });

      var infowindow = new google.maps.InfoWindow();
      var service = new google.maps.places.PlacesService(map);
      for(i = 0; i < cityList.length; ++i)
      {
        service.getDetails({
          placeId: cityList[i].placeID
        }, function(place, status) {
          if (status === google.maps.places.PlacesServiceStatus.OK) {
            var marker = new google.maps.Marker({
              map: map,
              position: place.geometry.location
            });
            google.maps.event.addListener(marker, 'click', function() {
              infowindow.setContent('<div><strong>' + place.name + '</strong><br>' +
                'Place ID: ' + place.place_id + '<br>' +
                place.formatted_address + '</div>');
              infowindow.open(map, this);
            });
          }
        });
      }
    }
  </script>
Run Code Online (Sandbox Code Playgroud)

显然,我稍后会将标记放置到循环中,但现在我只是尝试获取第一个元素进行测试。

编辑::这里的代码现在适用于未来的用户

Sae*_*adi 6

看来您将数据发送到ejs模板的方式是正确的,并且应该可以正常工作,请确保记录第一项,cityList如下所示:

var cityList = <%= cityList %>
console.log(cityList[0])
Run Code Online (Sandbox Code Playgroud)

更新:

server

var express = require('express');
var router = express.Router();

/* GET users listing. */
router.get('/', function(req, res) {
    var yourCities =  ["stockholm", "moscow", "barcelona", "bordeaux", "helsinki", "london"];
    var cityList = yourCities.reduce(function(cityList, city) {
      cityList.push(require('../public/cityData/' + city))
      return cityList;
    }, [])

    //TODO::need to update this to send an array
    res.render('map', {
        cityList : JSON.stringify(cityList),
    });
});

module.exports = router;
Run Code Online (Sandbox Code Playgroud)