Ich benutze das Request npm-Modul, um Daten aus einer API zu extrahieren und in Felder in meiner Mongo-Datenbank einzufügen. Afghanistan, das erste Land in der Datenbank, ist das einzige Dokument, das mit Daten gefüllt wird. Jedes andere Land wird übersprungen. Die folgende Code-Konsole protokolliert nacheinander den "Anfang" und das "Ende" und protokolliert anschließend den Ländernamen. Ich bekomme, dass dies das Ergebnis der asynchronen Natur von Javascript ist, aber ich bin mir nicht sicher, wie es diesen Code beeinflusst. sollte nicht das Konsolenprotokoll:MongoDb forJeden asynchronen Callback
begin
country
end
etc...
Hier ist der Code:
MongoClient.connect(url, function(err, db) {
db.collection('countries').find().forEach(function(myDoc) {
console.log('beginning');
var code = myDoc.country.iso2;
var options = {
url: 'https://api.tugroup.com/v1/travelsafe/countries/' + code,
headers: {
['X-Auth-API-Key']: '*******',
['Content-Type']: 'application/x-www-form-urlencoded'
}
}
var callback = function(error, response, body) {
console.log(myDoc.country.name);
if (!error && response.statusCode == 200) {
var info = JSON.parse(body);
db.collection('countries').updateOne(
{ 'country.name' : myDoc.country.name },
{ $set: {
'safety.hasAdvisoryWarning' : info.hasAdvisoryWarning,
'safety.hasRegionalAdvisory' : info.hasRegionalAdvisory,
'safety.advisories' : info.advisories,
'safety.advisoryState' : info.advisoryState,
'safety.advisoryText' : info.advisoryText,
'safety.lawAndCulture' : info.lawAndCulture,
'safety.security' : info.safety}
},
function(err, result) {
console.log(err);
db.close();
});
}
}
request(options, callback);
console.log('end');
});
});
Die Konsolenprotokolle:
begin
end
begin
end
etc...
Algeria
American Samoa
Andorra
etc...