2011-05-11 13 views
5

i db bağlanmak ve DB seçin:mysql paketini kullanarak nodejs'den sonuçlar nasıl alınır? İlk

var defaultOptions = { 
    user: "root", 
    pwd:'admin', 
    db:"britcham_dev_local", 
    server:"local", // Maybe we don't need this variable. 
}; 

var client = new Client(); 
client.user = defaultOptions.user; 
client.password = defaultOptions.pwd; 
client.connect(function (error, results) { 
    // 
}); 
client.query('USE ' + defaultOptions.db, function (error, results) { 
    // 
}); 

İkinci, ben istemci nesne ile sorgulamak:

var self = this; 
var this.users; 
client.query("SELECT * FROM users", function (error, results, fields) { 
    if (error) { 
     // 
    } 
    if (results.length > 0) { 
     self.users = results; 
    } 
}); 

console.log(this.users); 

hiçbir şey çıkışı var ??? Niye ya ?? node.js yana

+1

Bir DB'yi bağlarken ve seçerken hata mı alıyorsunuz? – yojimbo87

cevap

7

sonra bu kodu olmayan engelleme ve asenkron şudur: konsola içine giriş çalışırken DB'den

client.query("SELECT * FROM users", function (error, results, fields) { 
    if (error) { 
     // 
    } 
    if (results.length > 0) { 
     self.users = results; 
    } 
}); 

console.log(this.users); 

veriler muhtemelen kullanıcıları değişken içine henüz yüklenmez. Eğer sorgu içinde senin console.log operasyon yaparsanız örneğin, bunu kontrol edebilirsiniz:

client.query("SELECT * FROM users", function (error, results, fields) { 
    if (error) { 
     // 
    } 
    if (results.length > 0) { 
     console.log(results); 
    } 
}); 

bir değişkene sonucu geçmek için işlem, geri arama parametresi ile bir işlevi içine istemci DB çağrısı sarabilirsiniz bittiğinde ve geri çağırma işlemi çağrıldığında değişkeninizi ayarlayın, örneğin:

function query(sql, callback) { 
    client.query(sql, function (error, results, fields) { 
     if (error) { 
      // 
     } 
     if (results.length > 0) { 
      callback(results); 
     } 
    }); 
} 

query("SELECT * FROM users", function(results) { 
    self.users = results; 
    console.log(self.users); 
}); 

Yukarıdaki kod yalnızca bir kavramdır.

+0

Küçük bir yorum, ancak "DB'den gelen veriler muhtemelen yüklenmemiş ..." diyorsunuz. Veri aslında orada olacak, değil mi? (düğümde yalnızca bir iş parçacığı olduğundan ve bu iş parçacığı, console.log (this.users) çağrılıncaya kadar geri çağrıyı yürütmek için kullanılamayacağı için) –

+0

@Geoff: Veri DB'den getirildikten sonra orada olacak ancak, console.log çağrıldığında (orijinal kodda), kullanıcılar değişkeni hala boş. Örneğin, konsol.log işlemi setTimeout içinde sarılırsa, kullanıcılar DB'den sonuçlar içermelidir. – yojimbo87

+0

Evet, üzgünüm, asla ima etmedim demek istemedim - sadece konsol.log çağrısından önce orada olmayacak. Diğer bir deyişle, bir yarış durumu değildir (sadece bir iş parçacığı olduğu için). –

0

Önerilen cevap bundan nasıl farklıdır?

var self = this; 
var this.users; 
client.query("SELECT * FROM users", function (error, results, fields) { 
    if (error) { 
    // 
    } 
    if (results.length > 0) { 
     self.users = results; 
     console.log(this.users); 
    } 
}); 

biz geri DB'den veri var daha hiçbir erken konsola yazıyor ki bu önerilen cevaptan farklı değildir yanlış olabilir.

Önerilen yanıt sadece başka bir işlev eklemek için görünüyor?

İlgili konular