bs-knex v3.1.0
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.handleDbErrorsThis handles a some common database error cases, which will hopefully grow over time as the library becomes more mature.
License
7 years ago
7 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago