Database
The package construct database connections and perform operations on tables with the help of Knex.
Why use Knex?
Knex is a SQL query builder for Node.js. It is a great tool for building database operations. It is enough for this package rather than using a full ORM, like Sequelize, Prisma. However, we still leave possiblity for integrating with ORM in the future.
Data Access Object
The package encpasulates a data access object and export as a class Dao
for each table schema, providing a set of methods in common usage for operating tables.
export default class Dao {
db: Knex;
table: string;
alias: Record<string, string>;
constructor({ db, table, alias }: Options);
transform(data: Record<string, any>): Record<string, any>;
buildWhereClause(query: Knex.QueryBuilder, conditions: Record<string, any>): Knex.QueryBuilder<any, any>;
all(params: Record<string, any>): Promise<any[] | {
err: unknown;
}>;
paginate(params: Record<string, any>): Promise<import("knex-paginate").IWithPagination<{}, {
perPage: number;
currentPage: number;
isLengthAware: true;
}> | {
err: unknown;
}>;
getByFields(fields: Record<string, any>): Promise<any>;
delByFields(fields: Record<string, any>): Promise<number | {
err: unknown;
}>;
create(data: Record<string, any>): Promise<number[] | {
err: unknown;
}>;
updateByFields(fields: Record<string, any>, data: Record<string, any>): Promise<number | {
err: unknown;
}>;
}
db
Type: Knex
The database connection client of the data access object.
table
Type: string
The name of the table of the data access object.
alias
Type: Record<string, string>
The map of the column keys and the original column names. This map is constructed automatically while parsing the table schema. It is used for select
, insert
, update
, etc. See also Knex Identifier Syntax. For example:
{
"userId": "user_id",
"username": "username",
"createdAt": "created_at",
"updatedAt": "updated_at"
}
transform
Type: (data: Record<string, any>): Record<string, any>;
The transform
function used alias
to transform the map of column keys and values into the map of the original column names and values. It is used for constructing the query while applying insert
, update
and where
clauses. For example:
Request data:
{
"userId": 1,
"username": "admin",
"createdAt": "2023-01-01 00:00:00",
"updatedAt": "2023-01-01 00:00:00"
}
Transformed data for query:
{
"user_id": 1,
"username": "admin",
"created_at": "2023-01-01 00:00:00",
"updated_at": "2023-01-01 00:00:00"
}
buildWhereClause
Type:
(query: Knex.QueryBuilder, conditions: Record<string, any>): Knex.QueryBuilder<any, any>;
The buildWhereClause
function is used to construct the where
clause for the query from request parameters. See also Search. Basic usage:
buildWhereClause(baseQuery, transform(requestParmas))
all
Type:
(params: Record<string, any>): Promise<any[] | { err: unknown; }>;
The all
function is used to query all records from the table.
paginate
Type:
(params: Record<string, any>): Promise<import("knex-paginate").IWithPagination<{}, { perPage: number; currentPage: number; isLengthAware: true; }> | { err: unknown; }>;
The paginate
function is used to query records from the table with pagination. It is implemented with the help of knex-paginate.
getByFields
Type:
(fields: Record<string, any>): Promise<any>;
The getByFields
function is used to query a record by fields from the table.
delByFields
Type:
(fields: Record<string, any>): Promise<number | { err: unknown; }>;
The delByFields
function is used to delete a record by fields from the table.
create
Type:
(data: Record<string, any>): Promise<number[] | { err: unknown; }>;
The create
function is used to create a record in the table.
updateByFields
Type:
(fields: Record<string, any>, data: Record<string, any>): Promise<number | { err: unknown; }>;
The updateByFields
function is used to update a record by fields in the table.
Usage
See how to use database connection clients and data access objects: Usage.