経由近くのmongo DB接続は、私が考えなどNodejs、コールバック
実行プログラム非同期(async)、コールバックに問題がある:MongoDBのに
- 接続します。
- URLを作成する - https://example.com + locArrayから部品を追加する。
- それぞれにリクエストを送信します。
- データをmongo dbに保存します。
- 接続を閉じます。
問題:
接続はjsonDataFromApiに最後の行に閉鎖された場合は- DBに保存された各要求からすべてのデータの前に、「サーバインスタンスプールが破壊された」
だから
callback(db)
が別の場所に送られた -closeMongoDb
- しかし、エラーが現れた
"未定義の 'close'プロパティを読み取れません。私が思う
は、問題は非同期で、そこに非同期性に問題は間違いなくあるなど
const MongoClient = require('mongodb').MongoClient;
const Array = require('node-array');
const request = require('request');
var locationArray = [
'location1',
'location2',
'location3',
'location4'
];
var dataFromLocApi = (loc, callback) => {
request({
url: `https://example.com/${loc}`,
json: true
}, (error, response, body) => {
if (error){
callback('Error connection to url.');
} else{
callback(undefined, body.result);
}
});
};
var jsonDataFromApi = (urldb, callback) => {
MongoClient.connect(urldb, (err, db) => {
if (err) {
console.log('MongoDb connection error.');
}
console.log('MongoDb - connected.');
locationArray.forEachAsync(function(loc, index, arr) {
dataFromLocApi(loc, (errorMessage, results) => {
if (errorMessage) {
console.log(errorMessage);
} else {
console.log(JSON.stringify(results, undefined, 2));
db.collection('testCollection').insert(results, function(error, record) {
if (error)
throw error;
console.log("data saved");
});
}
});
}, function() {
console.log('complete');
});
callback(db);
});
}
var closeMongoDb = (urldb, callback) => {
jsonDataFromApi(urldb, (error, db) => {
if (error){
callback('Close connection - failure');
} else{
db.close();
console.log('MongoDb connections was closed.');
}
});
}
closeMongoDb('mongodb://127.0.0.1:27017/testDb', (err, db) => {
console.log('DONE');
});
また、関数closeMongoDbのコードを貼り付けてもらえますか? –
すべてのコードですが、closeMongoDbは関数ではありません。 – profiler
それは何ですか? –