为什么我不能在谷歌地图 api 中将"place_id"渲染到 ejs 文件?



我正在渲染 maps.ejs 文件,其中包含 : place_id , lat , lng .

如果我在 initMap 函数本身的 maps.ejs 文件中声明"place_id",那么代码运行良好,没有任何错误。 但是当我按照代码中所示渲染place_id时,它会在 chrome 的控制台中给出错误:

(索引):34 未捕获的引用错误:未定义ChIJN1t_tDeuEmsRUsoyG83frY4 at initMap ((index):34)

我正在使用 cloud9 并将API_KEY导出为环境变量。

//app.js
var express = require("express");
var app = express();
app.get("/", function(req, res) {
res.render("maps.ejs", {
place_id: "ChIJN1t_tDeuEmsRUsoyG83frY4",
lat: -33.8666199,
lng: 151.1958527
});
});
app.listen(process.env.PORT, process.env.IP, function() {
console.log("Server is ON");
}); // Server start
//maps.ejs
<!DOCTYPE html>
<html>
<head>
<style>
#map {
height: 400px;
width: 100%;
}
</style>
</head>
<title>Google Maps API</title>
<body>
<h3>My Google Maps Demo</h3>
<script>
function initMap() {
var uluru = {
lat: <%=lat%>,
lng: <%=lng%>
};
var map = new google.maps.Map(document.getElementById('map'), {
zoom: 14,
center: uluru
});
var infowindow = new google.maps.InfoWindow();
var service = new google.maps.places.PlacesService(map);
service.getDetails({
placeId: <%=place_id%>
}, function(place, status) {
console.log(place);
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 + '<br>' +
"Rating : " + place.rating + '</div>');
infowindow.open(map, this);
});
}
});
</script>
<script async defer src="https://maps.googleapis.com/maps/api/js?key=<%=process.env.API_KEY%>&libraries=places&callback=initMap">
</script>
<div id="map"></div>
</body>
</html>

地图 API是一个Web 浏览器API。如果您考虑将其调试为Express服务器应用程序的一部分,那么您只是在给自己设置麻烦。

相反,请使用 View Source 或使用浏览器的开发人员工具在浏览器中查看生成的代码。这将大大简化您的调试。一旦生成的 HTML 和 JavaScript 代码到达浏览器,服务器代码就完全无关紧要了。

也就是说,您遇到的特定错误很可能是由于maps.ejs文件中的以下代码行造成的:

placeId: <%=place_id%>

正如您在浏览器中执行视图源代码时将看到的那样,Express 在此处生成的代码可能是:

placeId: ChIJN1t_tDeuEmsRUsoyG83frY4

换句话说,浏览器中的 JavaScript 将ChIJN1t_tDeuEmsRUsoyG83frY4视为变量名,而不是您在此处可能需要的文字字符串。

要解决此问题,只需将 ID 放在引号中:

placeId: "<%=place_id%>"

现在生成的代码将是:

placeId: "ChIJN1t_tDeuEmsRUsoyG83frY4"

现在placeId将按预期成为一个字符串。

相关内容

  • 没有找到相关文章

最新更新