Nodejs Nestjs ORM插件nestjs-objection的使用
Nodejs Nestjs ORM插件nestjs-objection的使用nestjs-objection
是一个用于 NestJS 的 ORM 插件,它基于 Objection.js。Objection.js 是一个强大的 Node.js SQL 对象关系映射器(ORM),它支持 Knex.js 查询构建器。下面是一个简单的指南,帮助你开始使用 nestjs-objection
。
1. 安装依赖
首先,你需要安装必要的包:
npm install @nestjs/objection objection knex
2. 配置数据库连接
在你的 NestJS 应用中配置数据库连接。假设你使用的是 PostgreSQL 数据库:
// src/database/database.providers.ts
import { Provider } from '@nestjs/common';
import { Knex } from 'knex';
import { ObjectionModule, ObjectionModuleOptions } from '@nestjs/objection';
export const databaseProviders: Provider[] = [
{
provide: 'DATABASE_CONNECTION',
useFactory: (): Knex => {
return require('knex')({
client: 'pg', // 使用 PostgreSQL 客户端
connection: {
host: 'localhost',
user: 'your_db_user',
password: 'your_db_password',
database: 'your_db_name',
},
});
},
},
];
3. 配置 ObjectionModule
接下来,在你的模块中导入 ObjectionModule
并提供配置:
// src/app.module.ts
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { databaseProviders } from './database/database.providers';
import { ObjectionModule } from '@nestjs/objection';
@Module({
imports: [
ObjectionModule.forRootAsync({
useFactory: () => ({
modelsPaths: ['path/to/your/models'], // 指定模型文件路径
}),
}),
],
controllers: [AppController],
providers: [AppService, ...databaseProviders],
})
export class AppModule {}
4. 创建模型
创建你的模型文件,继承自 Model
类:
// path/to/your/models/user.model.ts
import { Model, BaseModel } from 'objection';
export class User extends BaseModel {
id!: number;
name!: string;
static get tableName() {
return 'users'; // 指定表名
}
}
5. 使用模型
现在你可以在服务中注入 User
模型并执行 CRUD 操作:
// src/app.service.ts
import { Injectable } from '@nestjs/common';
import { InjectModel } from '@nestjs/objection';
import { User } from './models/user.model';
@Injectable()
export class AppService {
constructor(@InjectModel(User) private readonly userModel: typeof User) {}
async createUser(name: string): Promise<User> {
return this.userModel.query().insert({ name });
}
async getUsers(): Promise<User[]> {
return this.userModel.query();
}
}
6. 控制器
最后,创建控制器来处理 HTTP 请求:
// src/app.controller.ts
import { Controller, Get, Post, Body } from '@nestjs/common';
import { AppService } from './app.service';
@Controller()
export class AppController {
constructor(private readonly appService: AppService) {}
@Post('users')
async createUser(@Body() body: { name: string }) {
return this.appService.createUser(body.name);
}
@Get('users')
async getUsers() {
return this.appService.getUsers();
}
}
通过以上步骤,你已经成功地在 NestJS 应用中集成了 nestjs-objection
,并实现了基本的 CRUD 操作。你可以根据需要进一步扩展和优化这些示例。
当然,没问题!NestJS 的 nestjs-objection
是一个很棒的 ORM 插件,它基于 Objection.js,让你可以在 NestJS 项目中轻松操作数据库。首先,你需要安装 objection
和 nestjs-objection
:
npm install objection
npm install @willsoto/nestjs-objection
接着,在你的模块文件中配置 NestjsObjectionModule
:
import { Module } from '@nestjs/common';
import { NestjsObjectionModule } from '@willsoto/nestjs-objection';
@Module({
imports: [
NestjsObjectionModule.forRoot({
Model: {
// 这里配置你的数据库连接
client: 'sqlite', // 或者 postgres, mysql 等
useNullAsDefault: true,
connection: {
filename: './your-database-file.sqlite',
},
},
}),
],
})
export class DatabaseModule {}
然后,你可以创建模型来继承自 NestjsObjectionModule.Model
,并开始享受 Objection.js 的强大功能了!
希望这能帮到你,如果还有其他问题,欢迎随时提问!
nestjs-objection
是一个用于 NestJS 框架的 ORM 插件,它基于 objection.js
。objection.js
是一个强大的 ORM,适用于 PostgreSQL、MySQL 等数据库。下面我将详细介绍如何在 NestJS 项目中安装和配置 nestjs-objection
。
安装
首先,你需要安装必要的依赖包:
npm install @nestjs/objection objection objection-lisp knex pg
这里安装了 @nestjs/objection
(nestjs-objection
的别名),objection
(ORM 核心库),objection-lisp
(提供查询构建器语法糖)以及 knex
和 pg
(对于 PostgreSQL 数据库)。
配置
接下来,在你的 NestJS 应用中创建一个模块(如果你还没有的话),并为 ObjectionModule
配置适当的设置。这通常在你的应用模块文件中完成,比如 app.module.ts
。
import { Module } from '@nestjs/common';
import { ObjectionModule } from '@nestjs/objection';
import { Book } from './book.model';
@Module({
imports: [
ObjectionModule.forRoot({
// 使用默认连接,或根据需要指定多个连接
// 这里配置 Knex.js 设置
config: {
client: 'pg', // 数据库客户端
connection: {
host : '127.0.0.1',
user : 'your_database_user',
password : 'your_database_password',
database : 'your_database_name'
}
},
models: {
// 这里注册你的模型
paths: [__dirname + '/models']
}
}),
],
providers: [],
exports: []
})
export class AppModule {}
创建模型
然后,创建一个模型文件,例如 book.model.ts
。这个文件定义了与数据库表对应的模型。
import { Model } from 'objection';
export class Book extends Model {
static get tableName() {
return 'books'; // 表名
}
id!: number;
title!: string;
author!: string;
static get jsonSchema() {
return {
type: 'object',
required: ['title', 'author'],
properties: {
id: { type: 'integer' },
title: { type: 'string', minLength: 1, maxLength: 255 },
author: { type: 'string', minLength: 1, maxLength: 255 },
},
};
}
}
使用模型
最后,在你的服务或其他模块中,你可以注入 Book
模型来执行数据库操作:
import { Injectable } from '@nestjs/common';
import { Book } from './book.model';
@Injectable()
export class BooksService {
constructor(private readonly bookModel: typeof Book) {}
async findAll(): Promise<Book[]> {
return this.bookModel.query();
}
async create(book: Omit<Book, 'id'>): Promise<Book> {
return this.bookModel.query().insert(book);
}
}
以上步骤展示了如何在 NestJS 中集成 nestjs-objection
并使用它来管理数据库模型和执行数据库操作。
nestjs-objection
是一个用于NestJS的ORM插件,基于Objection.js。使用步骤如下:
- 安装依赖:
npm install objection knex @types/knex @types/objection nestjs-objection
- 配置数据库连接(如PostgreSQL):
// app.module.ts
import { Module } from '@nestjs/common';
import { ObjectionModule } from 'nestjs-objection';
@Module({
imports: [
ObjectionModule.forRoot({
client: 'pg',
connection: 'your-database-connection-string',
}),
],
})
export class AppModule {}
- 创建模型并继承
Model
:
import { Model } from 'objection';
export class YourModel extends Model {
static get tableName() {
return 'your_table_name';
}
}
- 在服务中注入模型并使用:
import { Injectable } from '@nestjs/common';
import { YourModel } from './your-model.model';
@Injectable()
export class YourService {
constructor(private readonly yourModel: YourModel) {}
async findAll(): Promise<any[]> {
return this.yourModel.query();
}
}
这样就完成了基本配置和使用。