Soru MongoDB 'Sunucu soketleri kapalı' ve hiçbir düzeltme bulunamadı


Dün javascript MongoDB sürücüsünü kullanmaya başladım.

Bir sorunla karşılaştım, bir hata sürekli olarak gösteriliyor, ancak veriler hala saklanıyor.

Aşağıda, DB'ye başlangıçta bağlanmak için kullandığım javascript'i görebilir ve ardından bir ekleme sorgusu başlatılır. Ekleme sorgusunu başlatmazsanız, konsol çıktıları:

Sunucuya doğru bağlandı

Sunucudan başarıyla kesildi

Ancak, ekleme sorgusuyla çalışırken, bir hata döndürülür.

Sunucuya doğru bağlandı

{ [MongoError: server localhost:27017 sockets closed] ad: 'MongoError',

message: 'server localhost:27017 sockets closed'}

Sunucudan başarıyla kesildi

Biri beni doğru noktaya yönlendirebilir mi?

MongoClient.connect(db_default.db_url, function(err, db) {
    console.log('Connected correctly to server');
    if(err) {
        console.log(err);
    }
    else {
         mongoInsert(db, 'user', user_default, function(user_res) { 
            console.log(user_res);
        });
    }
    db.close();
    console.log('Disconnected from server successfully');
});

function mongoInsert(db, collection_name, data,cb) {
    var collection = db.collection(collection_name);
    collection.insert(data, function(err, res) {
        if(err) {
            console.log(err);
        }
        else {
            console.log('Inserted into the ' + collection_name + ' collection');
            cb(res);
        }
    });
}

26
2017-10-13 18:01


Menşei


Asynchronicity. Bağlantınızdaki geriçağırım, insert işlevini çağırır ve ek gerçekten çalışmadan önce veritabanına olan bağlantıyı derhal kapatır. Veritabanındaki bağlantıyı, eklentiden geri aramada kapatmayı deneyin. - wdberkeley
@wdberkeley Bağlantılar, ekleme işleminden önce kapanıyorsa, veriler nasıl depolanır? - Sasanka Panguluri
@SasankaPanguluri bu deterministik değil, ancak eğer ekleme gerçekleşirse o zaman, veritabanı sürücüsü isteğinizi veritabanına göndermek ve daha sonra bağlantıyı kapatmaktır. Bu nedenle veritabanı eklentiyi işler, ancak daha sonra soketin kapatılmasından dolayı etkileşimi başarıyla tamamlayamaz. - Eoin


Cevaplar:


Sonuçları almadan önce db bağlantısını kapatmayın. Aşağıdaki gibi yapın:

MongoClient.connect(db_default.db_url, function(err, db) {
    if(err) {
        console.log(err);
    }
    else {
         mongoInsert(db, 'user', user_default, function(user_res) { 
            console.log(user_res);
            db.close();
        });
    }

    console.log('Disconnected from server successfully');
});

function mongoInsert(db, collection_name, data,cb) {
    var collection = db.collection(collection_name);
    collection.insert(data, function(err, res) {
        if(err) {
            console.log(err);
        }
        else {
            console.log('Inserted into the ' + collection_name + ' collection');
            cb(res);
        }
    });
}

49
2018-04-17 09:28



Neredeyse bir yıl önce sordum ve sana yeşil yeşili vermedim. Gelecek için yardımlarınız için teşekkürler! - Luke Bennett


Çözümü en sonunda buldum, sorun yeni sunucuda dosya güvenliği ve mongdb npm dosyalarıydı, tüm dosyaların sahibi olmak için "chown" komutunu kullanmak zorunda kaldım ve sonra çalıştırdım  "npm yükleme"


0
2017-12-13 21:50