bs-knex
BuckleScript utilities for working with the Node knex library.
Getting Started
To start working with Knex, first define a config:
let (to_opt, getWithDefault) = (Js.Nullable.to_opt, Js.Option.getWithDefault);
let connection =
KnexConfig.Connection.make(
~user=Config.Database.username,
~password=Config.Database.password,
~host=Config.Database.hostname,
~port=Config.Database.port,
~database=Config.Database.name,
()
);
let pool =
KnexConfig.Pool.make(
~min=Config.Database.poolMin,
~max=Config.Database.poolMax,
~idleTimeoutMillis=Config.Database.poolIdle,
()
);
let config =
KnexConfig.make(~client="pg", ~connection, ~pool, ~acquireConnectionTimeout=2000, ());
Then you can initialize a client:
let knex = Knex.make(config);
You can now try a raw query to verify the connection:
knex |> Knex.raw("select now()")
Querying
Use the query builder to structure your request for the database:
Knex.(
knex
|> fromTable("users")
|> where({"id": id})
|> update({"first_name": firstName})
)
When you're ready to wait for results, call toPromise
:
|> then_(
(results) =>
switch results {
/* No user found, so resolve with None to signal onboarding */
| [||] => resolve(None)
| users => resolve(Some(users[0]))
}
)
Handle empty results with the rejectIfAny
handler:
|> then_(rejectIfEmpty(~error="Unable to update User with id: " ++ id))
Handle specific unique violations with the handleUniqueError
utility:
|> KnexUtils.handleUniqueError(
~name="users_email_unique",
~message="That email address is already in use."
)
|> KnexUtils.handleUniqueError(
~name="users_user_name_unique",
~message="That user name is already in use."
)
Finish off your operation by handling any remaining generic database errors with KnexUtils
:
|> KnexUtils.handleDbErrors
This handles a some common database error cases, which will hopefully grow over time as the library becomes more mature.
License
BSD 2-Clause