Friday, 23 August 2013

Javascript objects - feature missing from overall object, yet exists

Javascript objects - feature missing from overall object, yet exists

Strange problem here. I'm running Node/Express/Mongoose/Leaflet. I pull an
array of locations from my db, and once the callback is initiated, I
iterate over those locations to find a bunch of string passages that deals
with each location. I then try to append the array of passages to each
location object, and then append the locations array to a GeoJSON
FeatureCollection.
Location.find({}, { _id: 0 }, function (err, locations) {
if (err) {
console.log('DB Error loading all locations');
res.redirect('/');
} else {
var num = 0;
console.log("Beginning finding all passages");
locations.forEach(function (location) {
num++;
console.log("Looking up a location");
Passage.find({"placekey": location.properties.placekey}, function
(err, passages) {
if (err) {
console.log('DB Error finding passage for: ' +
location.properties.placekey);
} else {
console.log("Passage was found!");
location.properties.passages = passages[0]; //take first passage
num--;
}
if (num === 0) {
console.log("All passages were found!");
var featureCollection = {
"type": "FeatureCollection",
"features": locations
};
console.log(featureCollection);
console.log(featureCollection.features[0].properties);
console.log(featureCollection.features[0].properties.passages);
res.json(featureCollection);
console.log("JSON sent over!");
}
});
});
Logging the featureCollection gets me my featureCollection without any
passages:
{ "type": "FeatureCollection", "features": [ { "type": "Feature",
"properties": { "num_books": 62, "Age": "Built 1078", "ID": "",
"num_mentions": 325, "Place": "The Tower", "placekey": "TheTower",
"GeocodeNotes": "", "Notes": "Built on the site of Roman fortifications,
the central part of the Tower, known as the White Tower, was built in 1078
by William the Conqueror. Subsequent rings of fortification were added
later. It was used as a royal residence as well as a prison and place of
execution until Elizabethan times. England's child king, Edward V, and his
brother were murdered in the Tower in 1483 supposedly by their uncle,
Richard III.", "Class": "n/a", "Type": "Landmark" }, "geometry": { "type":
"Point", "coordinates": [ -0.076111, 51.508056 ] } }, // more objects
No passages property.
However, when I use
console.log(featureCollection.features[0].properties.passages), I get the
first passage: { "_id": "51deebdbb2b5de1b8b6d7da1", "index": 27100,
"bookid": 1, "author": "Ainsworth, William", "place": "The Tower",
"placekey": "TheTower", "query_ok": true, "year": 1839, "corpus":
"Chadwyck", "fn":
"/Volumes/LilaData1/Plain2/Chadwyck/lilaBookId_00149.txt", "context_a":
"The course of the carpenter's meditations was here... //more features }
Moreover, using (if 'passages' in
featureCollection.features[0].properties) gives me true. In fact, I can
condition sending a JSON response from the server to that, and my
featureCollection without passages will be sent...
Sorry for the long-winded post, but I'm really going crazy over this. Any
ideas?
Thank you! :)

No comments:

Post a Comment