Nodejs, 전단지 및 PostGIS를 사용하여 새 매핑 프로젝트 작업. 이 시점에서 Postgis의 영업 담당자 영역과 함께지도 타일 레이어를로드하고 표시 할 수 있습니다. 이제 Postgresql에 저장되어있는 모든 미국 카운티를 표시하는 다른 레이어를 추가하려고합니다. 따로 따로 사용할 때 Postgis 쿼리가 실행되고 표시되지만로드와 함께 표시 할 수는 없습니다.PostGIS 쿼리의 다중 레이어가있는 NodeJS 전단지
router.get('/map', function(req, res) {
var client = new pg.Client(conString); // Setup our Postgres Client
client.connect(); // connect to the client
var query = client.query(zone_query); // Run our Query
query.on("row", function (row, result) {
result.addRow(row);
});
// Pass the result to the map page
query.on("end", function (result) {
var data = result.rows[0].row_to_json; // Save the JSON as variable data
res.render('map', {
title: "Express API", // Give a title to our page
zoneData: data // Pass data to the View
});
});
});
router.get('/map', function(req, res) {
var client = new pg.Client(conString); // Setup our Postgres Client
client.connect(); // connect to the client
var query = client.query(counties_query); // Run our Query
query.on("row", function (row, result) {
result.addRow(row);
});
// Pass the result to the map page
query.on("end", function (result) {
var data2 = result.rows[0].row_to_json; // Save the JSON as variable data
res.render('map', {
title: "Express API", // Give a title to our page
countyData: data2 // Pass data to the View
});
});
});
그리고 '보기/map.pug'에서 :
script("text/javascript").
$(document).ready(function(){
var myData = !{JSON.stringify(zoneData)};
var cntyData = !{JSON.stringify(countyData)};
// Create variable to hold map element, give initial settings to map
var map = L.map('map',{
center: [39.7799642, -86.2728367],
zoom: 6,
//layers: [zones, counties]
});
... 그리고 더 아래 다음 : 여기에 nodejs '루트 /하는 index.js'에서 발췌 한 것입니다
L.geoJson(myData,{
style: zoneStyle,
onEachFeature: function (feature, layer) {
var ofc = JSON.stringify(feature.properties.office);
var zn = JSON.stringify(feature.properties.zone);
layer.bindPopup("office: " + ofc + "<br>" + "zone #" + zn);
// layer.bindPopup("Zone #"+JSON.stringify(feature.properties.zone));
}
}).addTo(map);
// Add county data to map
L.geoJson(cntyData,{
onEachFeature: function (feature, layer) {
//var desc = JSON.stringify(feature.properties.descriptio);
layer.bindPopup(desc);
}
}).addTo(map);
이 중 하나가 완벽하게 작동하지만 두 레이어를로드하려고하면 아무 것도 표시되지 않습니다. 궁극적으로 제가 달성하고자하는 것은 판매 구역과 주 카운티 경계 레이어를 켜거나 끄는 것입니다.
모든 의견에 감사드립니다.
내부적으로 충돌을 일으킬 수있는 두 개의 PGSQL 쿼리 모두에 대해 'query' 변수 이름을 사용하고 있습니다. 다른 이름을 사용하거나 클로저를 사용하십시오. – IvanSanchez
그 중, 당신은'res.render()'를 두 번 시도하고 있습니다. 내 node.js는 녹슬지 않으므로 익스프레스에서 의미가 있다는 것을 확실히하십시오. – IvanSanchez
'res.render()'의 첫 번째 호출은 모든 HTML을 브라우저에 반환하고 사물의 빠른 쪽에서 요청 - 응답 스트림을 닫아'res.render()'호출 중 하나를 만들 가능성이 높습니다 조용히 실패하라. – IvanSanchez