willsoto/nestjs-objection has 143 GitHub stars and 8 forks. GitHot measured 0 stars in 24 hours. Last checked 2026-11-10 20:10 UTC. Last push 2026-11-02.
NestJS module for Objection
計測したスター増加
- 24時間
- 0
- 7日間
- 更新が遅れています
- 15日間
- 更新が遅れています
- 1か月
- 更新が遅れています
期間ごとの純増数です。期間は重複しており、日別の値ではありません。未計測の値は空欄です。スター数は注目度の指標であり、品質の保証ではありません。
README.md
オリジナルNestJS Objection
Description
Integrates Objection.js and Knex with Nest
Installation
pnpm add @willsoto/nestjs-objection
Note that Knex and Objection are peerDependencies to make version management easier, so those must be installed separately
pnpm add knex objection
API
ObjectionModule.register
import { Module } from "@nestjs/common";
import { ObjectionModule } from "@willsoto/nestjs-objection";
import { BaseModel } from "./base";
import { User } from "./user";
@Module({
imports: [
ObjectionModule.register({
// You can specify a custom BaseModel
// If none is provided, the default Model will be used
// https://vincit.github.io/objection.js/#models
Model: BaseModel,
config: {
client: "sqlite3",
useNullAsDefault: true,
connection: {
filename: "./example.sqlite",
},
},
}),
//Register your objection models so it can be provided when needed.
ObjectionModule.forFeature([User]),
],
exports: [ObjectionModule],
})
export class DatabaseModule {}
ObjectionModule.registerAsync
import { Module } from "@nestjs/common";
import { ObjectionModule } from "@willsoto/nestjs-objection";
import knex from "knex";
import { knexSnakeCaseMappers } from "objection";
import { ConfigModule, ConfigService } from "../config";
import { BaseModel } from "./base";
import { User } from "./user";
@Module({
imports: [
ObjectionModule.registerAsync({
imports: [ConfigModule],
inject: [ConfigService],
useFactory(config: ConfigService) {
return {
// You can specify a custom BaseModel
// If none is provided, the default Model will be used
// https://vincit.github.io/objection.js/#models
Model: BaseModel,
config: {
...config.get<knex.Config>("database"),
...knexSnakeCaseMappers(),
},
};
},
}),
//Register your objection models so it can be provided when needed.
ObjectionModule.forFeature([User]),
],
exports: [ObjectionModule],
})
export class DatabaseModule {}
Configuration
| Name | Type | Required | Default | Notes |
|---|---|---|---|---|
name |
string |
false |
KNEX_CONNECTION token |
This is required only if you are using multiple connections |
Model |
Object |
false |
objection.Model |
|
config |
Object |
true |
Examples
Injecting the connection
import { Inject, Injectable } from "@nestjs/common";
import { HealthCheckError, HealthIndicator, HealthIndicatorResult } from "@nestjs/terminus";
import { Connection, KNEX_CONNECTION } from "@willsoto/nestjs-objection";
@Injectable()
export class PrimaryDatabaseHealthIndicator extends HealthIndicator {
constructor(@Inject(KNEX_CONNECTION) public connection: Connection) {}
async ping(key: string = "db-primary"): Promise<HealthIndicatorResult> {
try {
await this.connection.raw("SELECT 1");
return super.getStatus(key, true);
} catch (error) {
const status = super.getStatus(key, false, { message: error.message });
throw new HealthCheckError("Unable to connect to database", status);
}
}
}
Injecting an objection model
import { Inject, Injectable } from "@nestjs/common";
import { User } from "./user";
@Injectable()
export class UserService {
constructor(@Inject(User) private readonly userModel: typeof User) {}
async getUsers(): Promise<User[]> {
return await this.userModel.query();
}
}
Multiple connections
When using multiple connections, you must name each connection when registering it.
Otherwise subsequent connections will override the previous ones.
With registerAsync, set name on the registerAsync options themselves; any name returned
from the factory is ignored.
@Module({
imports: [
ObjectionModule.registerAsync({
// You must provide a name for the connection
name: "connection1",
imports: [ConfigModule],
inject: [ConfigService],
useFactory(config: ConfigService) {
return {
Model: BaseModel1,
config: {
client: "sqlite3",
useNullAsDefault: true,
connection: {
filename: "./testing1.sqlite",
},
},
};
},
}),
ObjectionModule.register({
// You must provide a name for the connection
name: "connection2",
Model: BaseModel2,
config: {
client: "sqlite3",
useNullAsDefault: true,
connection: {
filename: "./testing2.sqlite",
},
},
}),
],
})
export class DatabaseModule {}
関連プロジェクトを探す
Asabeneh/30-Days-Of-Python
30 Days of Python プログラミングチャレンジは、Python プログラミング言語を 30 日で学ぶためのステップバイステップのガイドです。このチャレンジは 100 日以上かかることもあります。自分のペースで進めてください。こちらの動画も役立つかもしれません: https://www.youtube.com/channel/UC7PNRuno1rzYPb1xLa4yktw
78,560 スターgrafana/grafana
オープンで組み合わせ可能なオブザーバビリティおよびデータ可視化プラットフォームです。Prometheus、Loki、Elasticsearch、InfluxDB、Postgres など、複数のソースからメトリクス、ログ、トレースを可視化できます。
77,830 スターredis/redis
リアルタイムのデータ駆動型アプリケーションを構築する開発者にとって、Redis は最も選ばれ、最速で、機能が最も豊富なキャッシュ、データ構造サーバー、ドキュメントおよびベクトルクエリエンジンです。
77,395 スターapache/superset
Apache Superset は、データ可視化とデータ探索のためのプラットフォームです。
75,473 スター