I am using NodeJS, Express, and MySQL for my project and want to use Bookshelf ORM with it.
Bookshelf uses Knex for querying, modeling, and suggests to setup the DB connection through Knex(http://bookshelfjs.org/#installation).
I am having trouble in establishing a successful DB connection with Knex. I want to start the server only if DB connection is successful, but it seems like it doesn't offer anything after establishing the connection to do so(no promise or property).
This is the code I have been using.
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;
More reference: There is another ORM named Sequelize and it provides sequelize.authenticate()
which return Promise and could be used as (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') );
The only solution I can think of is to perform a raw query like USE {DB_NAME}
and use its output to decide whether to start the server or not. Is this solution good enough?