Чему вы научитесь

Вы узнаете, как подключить облачную базу данных PostgreSQL к NestJS, выполнить конфигурацию и создать таблицу в базе данных с помощью TypeORM. NestJS — прогрессивный фреймворк Node.js для создания эффективных, надежных и масштабируемых приложений на стороне сервера. Neon — бессерверная платформа Postgres, созданная для работы в облаке.

Необходимые условия

  • Знание на базовом уровне JavaScript и TypeScript.
  • Установка на компьютере LTS-версии Node.js.

Приступим

Шаг 1. Создание аккаунта в Neon

Перейдите на страницу регистрации и создайте новую учетную запись.

Шаг 2. Создание проекта Neon

После создания нового аккаунта вам будет предложено создать проект. Вы должны заполнить форму в соответствии с требованиями своего проекта. В поле «Region» рекомендуется выбрать ближайший к вам регион, чтобы получить максимальную из доступных скорость соединения.

Шаг 3. Установка CLI NestJS глобально

Чтобы установить CLI NestJS глобально, используйте приведенную ниже команду в терминале:

npm i -g @nestjs/cli

Шаг 4. Создание приложения NestJs

Чтобы создать новый проект NestJS, выполните следующую команду:

nest new project-name
  • Можете заменить «project-name» желаемым именем проекта. В этом руководстве проект будет называться «grocery-store-server«.

Шаг 5. Добавление зависимостей и генерация ресурсов

После создания проекта перейдите в его каталог и выполните приведенную ниже команду, чтобы добавить зависимости для настройки конфигурации, TypeORM и клиента PostgreSQL для Node.js:

npm i --save @nestjs/config @nestjs/typeorm typeorm pg

Теперь необходимо сгенерировать новый ресурс. Для этого воспользуемся следующей командой (командой CLI):

nest g res resource-name --no-spec
  • Можете заменить «resource-name» желаемым именем ресурса. Поскольку название проекта в этом руководстве — «grocery-store-server«, имя моего ресурса будет «products«.

Шаг 6. Добавление в проект переменных среды

Чтобы получить переменные среды, нужно вернуться в Neon-аккаунт. На боковой панели выберите «Quickstart» («Быстрый доступ»); в открывшемся списке нажмите «Create and connect to your development branch» («Создание и подключение к ветке разработки») и выберите нужную конфигурацию (в нашем случае Node.js).

Скопируйте переменные среды и вставьте их в файл .env в корне проекта.

Шаг 7. Выполнение конфигурации проекта

Чтобы сообщить проекту об используемой базе данных, необходимо выполнить конфигурацию. Для этого зададим переменные среды базы данных в качестве значений для соответствующих ключей. Это даст возможность управлять таблицами, записями в базе данных и т. д.

Добавим следующий код в app.module.ts:

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { ProductsModule } from './products/products.module';
import { ConfigModule, ConfigService } from '@nestjs/config';
import { TypeOrmModule } from '@nestjs/typeorm';

@Module({
imports: [
ProductsModule,
ConfigModule.forRoot({
isGlobal: true,
}),
TypeOrmModule.forRootAsync({
imports: [ConfigModule],
useFactory: (configService: ConfigService) => ({
type: 'postgres',
host: configService.get('PGHOST'),
port: 5432,
username: configService.get('PGUSER'),
password: configService.get('PGPASSWORD'),
database: configService.get('PGDATABASE'),
autoLoadEntities: true,
synchronize: true,
extra: {
ssl: true,
},
}),
inject: [ConfigService],
}),
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}

Шаг 8. Создание таблицы

Для хранения данных необходима таблица, поэтому перейдем в src/products/entities/product.entity.ts и добавим следующий код:

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

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

@Column()
name: string;

@Column()
price: string;
}

После создания сущности товара необходимо импортировать ее в модуль products.

Поэтому добавим следующий код в src/products/product.module.ts:

import { Module } from '@nestjs/common';
import { ProductsService } from './products.service';
import { ProductsController } from './products.controller';
import { TypeOrmModule } from '@nestjs/typeorm';
import { Product } from './entities/product.entity';

@Module({
imports: [TypeOrmModule.forFeature([Product])],
controllers: [ProductsController],
providers: [ProductsService],
})
export class ProductsModule {}

Шаг 9. Запуск приложения

Чтобы запустить приложение, выполним следующую команду в терминале:

npm run start:dev

Если вы перейдете в свой Neon-аккаунт и выберите «Tables» («Таблицы») на боковой панели, то увидите созданную таблицу.

Репозиторий на Github: grocery-store-server.

Читайте также:

Читайте нас в Telegram, VK и Дзен


Перевод статьи Ihor Ivliev: NestJS and PostgreSQL: A set up tutorial

Предыдущая статьяКлючевые понятия JavaScript, которые должен знать каждый разработчик — часть 2