1.3.1 • Published 6 months ago

@cheermix/knex v1.3.1

Weekly downloads
-
License
MIT
Repository
github
Last release
6 months ago

Usage

An integrated library that wraps knex, Remember to install your database client

npm i -S @cheermix/knex pg
import joi from "joi"
import {
  autoCommitTransaction,
  transactionMiddleware,
  transactionAuthenticate,
  Knex,
} from "@cheermix/knex"
import {
  ExpressRouter,
  validParam,
  validResponseDataAndSendIt,
  NotFoundException,
  startup,
} from "@cheermix/rest"

async function findUser(userId: number, transaction: Knex.Transaction) {
  const firstUser = await transaction<{
    id: number
    name: string
  }>("User")
    .where("id", userId)
    .select("*")
    .first()

  return firstUser
}

// Commonly used
autoCommitTransaction(async function (transaction) {
  const user = await findUser(1, transaction)
})

// Used with @cheermix/rest
const findUser: ExpressRouter = {
  method: "GET",
  path: "/users/:userId"
  middlewares: [
    validParam({
      userId: joi.number().integer().required()
    }),
    transactionMiddleware(async function (request, response, transaction) {
      const user = await findUser(request.data.param.userId, transaction)
      if (!user) {
        throw new NotFoundException()
      }

      response.data = user
    }),
    validResponseDataAndSendIt({
      id: joi.number().integer().required(),
      name: joi.string(),
    })
  ]
}

startup([findUser], {
  authenticationFindUserLogic: transactionAuthenticate((payload, transaction) =>
    findUser(Number.parseInt(payload.sub as string), transaction)
  )
})

Environment

NameTypeDefault ValueIs Require?Description
NODE_ENVstringdevelopmentnoNode environment
DB_CLIENTstringpgnoDatabase client
DB_HOSTstringyesDatabase host
DB_NAMEstringyesDatabase name
DB_USERNAMEstringyesAccount username
DB_PASSWORDstringyesAccount password
DB_POOLSIZE_MINnumber5noConnection pool minimum size
DB_POOLSIZE_MAXnumber20noConnection pool maximum size
1.3.1

6 months ago

1.3.0

7 months ago

1.2.4

7 months ago

1.2.3

7 months ago

1.2.2

7 months ago

1.2.1

7 months ago

1.2.0

7 months ago

1.0.1

7 months ago

1.0.0

7 months ago