Nurturing Pluto's Martians

    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

    Install

    npm i bs-knex

    DownloadsWeekly Downloads

    4

    Version

    3.1.0

    License

    BSD-2-Clause

    Unpacked Size

    183 kB

    Total Files

    15

    Last publish

    Collaborators

    • bkonkle