2017-02-01 6 views
5

내 프로젝트에 NodeJS, Express 및 MySQL을 사용하고 있고 Bookshelf ORM을 사용하려고합니다.nodejs에서 Knex 연결을 확인하는 방법

Bookshelf는 쿼리, 모델링에 Knex를 사용하고 Knex (http://bookshelfjs.org/#installation)를 통해 DB 연결을 설정할 것을 제안합니다.

Knex와의 성공적인 DB 연결을 설정하는 데 문제가 있습니다. DB 연결이 성공한 경우에만 서버를 시작하고 싶지만 그렇게하기 위해 연결을 설정 한 후에 아무것도 제공하지 않는 것 같습니다 (약속 또는 속성 없음).

이것은 내가 사용 해본 코드입니다.

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; 

더 참고 :이 Sequelize라는 이름의 또 다른 ORM이며,이 약속을 반환하고 (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')); 

내가 생각할 수있는 유일한 해결책은 수행하는 것입니다으로 사용될 수 sequelize.authenticate()을 제공USE {DB_NAME}과 같은 원시 쿼리를 사용하여 서버를 시작할지 여부를 결정합니다. 이 솔루션이 충분히 좋은가요?

답변

4

이번 주 초에이 문제는 knex 이슈 트래커에서 논의되었습니다. https://github.com/tgriesser/knex/issues/1886

쿼리를 만드는 것이 데이터베이스에 연결할 수 있는지 확인하는 좋은 방법입니다. 쿼리를 만들지 않으면 풀은 초기 연결을 만들 필요가 없습니다 (풀 설정에 따라 다름).

데이터베이스 (https://github.com/knex/documentation/pull/17/files)에 대한 새로운 연결이있을 때 알려주기 위해 풀의 afterCreate 콜백을 연결할 수도 있습니다.