2016-03-20 3 views
1

express ile knex kullanma sonuçları erişilir?nasıl nasıl bir knex sorgusunun sonuçları erişebilir, knex sorgu

Örnek:

var bots = [] 

response = knex.select('id', 'name').from('robots') 
    .then(function(robots){ 
    console.log(robots); 
    bots = robots 
    }); 

console.log(bots) 

Bu robot log ama boş bots dizi güncellemediğinden olmaz.

DÜZENLEME

:

router.get('/robots', function (req, res) { 

    response = knex.select('id', 'name').from('robots').then(function(bots){ 

    res.render('robots/index', { 
     page_title: 'All Robots', 
     robots: bots 
    }); // res.render 

    }); // knex.select 

}); // router.get 

bu önerilen model mi: Bir senkron geçici çözüm olarak

, bir ekspres rotada, ben knex bloğun içine ekspres blok sıkışmış?

+4

'db sonuçları mevcuttur ve düğüm arada herhangi olmadığını kodunuzu işleme devam zaman then' işlevi geri arama, temel olarak da adı eşzamansızdır. Bence ilk önce tanımlanamayan terminalde farkettim, sonra sonuçlar. Sadece async nodejs – Molda

+1

ile ilgili bazı öğreticiler için arama yapın, bir değişkene "knex" eylemini/sorgusunu ayarlamam (sizin durumunuzda 'response'). 'Knex', Promise tabanlı olduğundan,' then() 'bileşeni içindeki değişkenleri gerçekleştirin ve ayarlayın (veya hatalar için' catch() '). Eğer bir değişken 'response' olmasını istedik eğer yani, ben sonradan ve iç' ardından() 'birleştirdikten sonra' knex' veritabanı sorgusu önce 'var response' ayarlamak ve olurdu, ben' response' kuracak 'knex' sorgusunun sonucundan ne olursa olsun. – kuanb

cevap

2

knex Promises kullanır. Özellikle, http://bluebirdjs.com/docs/getting-started.html kullanır. bunun hemen denir çünkü knex sorgu başarıyla denilen ve çalıştırıldıktan sonra .then(...) sadece denirken console.log(bots), çalışmaz.

Düzenlenmiş "senkronize geçici çözüm", Express sorgusunu çalıştırmak için doğru yöntemdir, ancak bu sorguyu var response olarak ayarlamanıza gerek yoktur (bu konuyla ilgili daha fazla bilgi için yorumuma bakın).