在Nestjs中与Typeorm建立PostgreSQL连接
#node #postgres #nestjs #typeorm

TypeORM + Postgres

在现代网络开发的世界中,构建可扩展和高效的应用程序需要在管理数据库中稳固的基础。 PostgreSQL是一种强大的开源关系数据库管理系统,可用于其性能和可靠性。当与Nestjs应用程序中的TypeOmm库结合使用时,它成为管理数据库连接和交互的有效组合。本文将指导您完成使用Nestjs设置中的TypeOMS建立PostgreSQL连接的过程,包括使用Docker设置PostgreSQL数据库并创建Poll API示例。

先决条件

在我们深入了解细节之前,请确保您在系统上安装了以下工具和技术:

  1. node.js和npm:运行Nestjs应用程序。

  2. Docker:用于在Docker容器中设置PostgreSQL数据库。

  3. Nest Cli:要生成和管理您的Nestjs应用程序。

步骤1:创建一个Nestjs应用程序

让我们从创建新的Nestjs应用程序开始。打开终端并执行以下命令:

nest new poll-api

导航到项目目录:

cd poll-api

步骤2:安装Typeorm和PostgreSQL软件包

typeorm是用于打字稿和JavaScript的流行对象关联映射(ORM)库。它通过允许开发人员使用打字稿类和装饰器与数据库进行交互来简化数据库操作。

安装typeorm和postgresql驱动程序作为项目依赖项:

npm install @nestjs/typeorm typeorm pg

步骤3:使用Docker设置PostgreSQL数据库

Docker是创建孤立开发环境的重要工具。我们将使用Docker为我们的Nestjs应用程序设置PostgreSQL数据库服务器。

在项目的根目录中创建一个docker-compose.yml文件:

version: '3.7'
services:
  postgres:
    image: postgres:13
    container_name: postgres_db
    ports:
      - '5432:5432'
    environment:
      POSTGRES_DB: poll_db
      POSTGRES_USER: poll_user
      POSTGRES_PASSWORD: poll_password
    volumes:
      - postgres_data:/var/lib/postgresql/data
volumes:
  postgres_data:

此DOCKER组成配置设置了一个名为Postgres_db的Postgresql容器,其中一个名为Poll_db的数据库,名为Poll_user的用户和关联的密码。

使用Docker组成:
运行PostgreSQL容器

docker compose up -d

步骤4:配置Typeorm连接

打开src/app.module.ts文件并配置Typeorm连接。导入必要的模块并使用PostgreSQL连接选项配置TypeorMmodule.forroot()方法:

import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';

@Module({
  imports: [
    TypeOrmModule.forRoot({
      type: 'postgres',
      host: 'localhost',
      port: 5432,
      username: 'poll_user',
      password: 'poll_password',
      database: 'poll_db',
      entities: [],
      synchronize: true,
    }),
  ],
})
export class AppModule {}

步骤5:创建一个民意调查实体

在src/poll目录中创建一个poll.entity.ts文件。使用Typeorm装饰器定义民意调查实体:

import { Entity, PrimaryGeneratedColumn, Column } from 'typeorm';

@Entity()
export class Poll {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  question: string;

  @Column('jsonb', { nullable: true })
  options: string[];
}

步骤6:创建民意调查服务

在src/poll目录中创建一个poll.service.ts文件。实施Pollservice类,该类将负责与数据库进行交互:

import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { Poll } from './poll.entity';

@Injectable()
export class PollService {
  constructor(
    @InjectRepository(Poll)
    private readonly pollRepository: Repository<Poll>,
  ) {}

  async createPoll(question: string, options: string[]): Promise<Poll> {
    const poll = this.pollRepository.create({ question, options });
    return this.pollRepository.save(poll);
  }

  async getAllPolls(): Promise<Poll[]> {
    return this.pollRepository.find();
  }
}

步骤7:创建一个民意调查控制器

在src/poll目录中创建一个poll.controller.ts文件。实施PollController类,该类将处理与民意调查有关的传入HTTP请求:

import { Controller, Get, Post, Body } from '@nestjs/common';
import { PollService } from './poll.service';

@Controller('polls')
export class PollController {
  constructor(private readonly pollService: PollService) {}

  @Post()
  createPoll(@Body() { question, options }: { question: string; options: string[] }) {
    return this.pollService.createPoll(question, options);
  }

  @Get()
  getAllPolls() {
    return this.pollService.getAllPolls();
  }
}

步骤8:配置模块

再次打开src/app.module.ts文件并导入pollcontroller和pollservice。

import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { Poll } from './poll/poll.entity';
import { PollService } from './poll/poll.service';
import { PollController } from './poll/poll.controller';

@Module({
  imports: [
    TypeOrmModule.forRoot({
      // ... (previous TypeORM config)
      entities: [Poll],
      synchronize: true,
    }),
    TypeOrmModule.forFeature([Poll]),
  ],
  providers: [PollService],
  controllers: [PollController],
})
export class AppModule {}

步骤9:测试API

通过运行以下命令来启动Nestjs应用程序:

npm run start:dev

现在,您可以使用Curl或Postman之类的工具访问API端点:

创建一个民意调查:后http://localhost:3000/polls
请求身体:

{
  "question": "What's your favorite programming language?",
  "options": ["JavaScript", "Python", "Java", "C++"]
}

获取所有民意调查:获取http://localhost:3000/polls

结论

在本详细指南中,我们学会了如何在Nestjs应用程序中使用TypeOMM建立PostgreSQL连接。我们使用Docker设置了一个PostgreSQL数据库,定义了一个民意调查实体,创建了民意调查服务,并实现了API端点以创建和检索轮询。该基础为使用Nestjs Framework,PostgreSQL和Typeorm构建更复杂和功能的应用程序提供了强大的基础。

这是一个示例项目存储库的链接,以对本文讨论的概念进行更具体的演示:Github Repo