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 操作。你可以根据需要进一步扩展和优化这些示例。


3 回复

当然,没问题!NestJS 的 nestjs-objection 是一个很棒的 ORM 插件,它基于 Objection.js,让你可以在 NestJS 项目中轻松操作数据库。首先,你需要安装 objectionnestjs-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.jsobjection.js 是一个强大的 ORM,适用于 PostgreSQL、MySQL 等数据库。下面我将详细介绍如何在 NestJS 项目中安装和配置 nestjs-objection

安装

首先,你需要安装必要的依赖包:

npm install @nestjs/objection objection objection-lisp knex pg

这里安装了 @nestjs/objectionnestjs-objection 的别名),objection(ORM 核心库),objection-lisp(提供查询构建器语法糖)以及 knexpg(对于 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。使用步骤如下:

  1. 安装依赖:npm install objection knex @types/knex @types/objection nestjs-objection
  2. 配置数据库连接(如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 {}
  1. 创建模型并继承 Model
import { Model } from 'objection';

export class YourModel extends Model {
  static get tableName() {
    return 'your_table_name';
  }
}
  1. 在服务中注入模型并使用:
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();
  }
}

这样就完成了基本配置和使用。

回到顶部