2017-02-01 17 views
5

Używam NodeJS, Express i MySQL dla mojego projektu i chcę używać z nim regału ORM Bookshelf.Jak zapewnić połączenie Knex w nodejs

Regał wykorzystuje Knex do wysyłania zapytań, modelowania i sugerowania konfiguracji połączenia DB przez Knex (http://bookshelfjs.org/#installation).

Mam problem z nawiązaniem udanego połączenia DB z Knex. Chcę uruchomić serwer tylko wtedy, gdy połączenie DB zakończy się powodzeniem, ale wygląda na to, że nie oferuje niczego po nawiązaniu połączenia (bez obietnicy lub właściwości).

To jest kod, którego używałem.

import _knex from "knex"; // npm install knex --save 
import _bookshelf from "bookshelf"; // npm install bookshelf --save 

let knex = _knex({ 
    client: "mysql", 
    connection: { 
     host: "127.0.0.1", 
     database: process.env.DB, 
     user: process.env.DB_USERNAME, 
     password: process.env.DB_PASSWORD 
    }, 
    debug: true 
}); 

let bookshelf = _bookshelf(knex); 

module.exports.knex = knex; 
module.exports.bookshelf = bookshelf; 

Więcej referencyjny: Istnieje inny ORM nazwie Sequelize i zapewnia sequelize.authenticate() które zwracają obietnicy i może być używany jako (http://docs.sequelizejs.com/en/latest/api/sequelize/#authenticate-promise)

sequelize.authenticate() 
    .then(() => { 
     console.log("Db successfully connected"); 
     app.listen(port,() => console.log(`App started at: ${port}`)); 
    }) 
    .catch(err => console.log('Unable to connect to the database')); 

Jedynym rozwiązaniem można myślę, jest do wykonywania surowe zapytanie, takie jak USE {DB_NAME} i użyj jego danych wyjściowych, aby zdecydować, czy uruchomić serwer, czy nie. Czy to rozwiązanie jest wystarczająco dobre?

Odpowiedz

4

Zostało to omówione wcześniej w tym tygodniu w module śledzenia problemów knex. https://github.com/tgriesser/knex/issues/1886

Tworzenie zapytania jest dobrym sposobem sprawdzenia, czy można nawiązać połączenie z bazą danych. Jeśli nie są wykonywane żadne zapytania, pula nie musi tworzyć żadnych początkowych połączeń (w zależności od ustawień puli).

Możesz także podłączyć do linii telefonicznej afterCreate oddzwonienie, aby powiadomić Cię, gdy kiedykolwiek pojawi się nowe połączenie z bazą danych (https://github.com/knex/documentation/pull/17/files).

Powiązane problemy