bs-knex

3.1.0 • Public • Published

bs-knex

version downloads license

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

Package Sidebar

Install

npm i bs-knex

Weekly Downloads

1

Version

3.1.0

License

BSD-2-Clause

Unpacked Size

183 kB

Total Files

15

Last publish

Collaborators

  • bkonkle