📜  nestjs pg heroku - Javascript (1)

📅  最后修改于: 2023-12-03 15:03:09.638000             🧑  作者: Mango

用 NestJS、PostgreSQL 和 Heroku 搭建 Web 应用

当今 Web 应用的开发中,特别重视效率和可靠性,NestJS 框架就能做到这一点,它是一个基于 TypeScript 的 Node.js 框架,通过其模块化体系结构和丰富的生态系统,可以帮助开发者快速构建可扩展的 Web 应用。

在本文中,我们将介绍如何使用 NestJS、PostgreSQL 和 Heroku 平台搭建 Web 应用,以下是整个教程的大纲:

  1. 准备工作
    1. 安装 Node.js 和 NestJS
    2. 创建项目
    3. 安装依赖项
  2. 连接 PostgreSQL
    1. 在 Heroku 上创建 PostgreSQL 数据库
    2. 配置 NestJS 与 PostgreSQL 的连接
    3. 创建 Entity
    4. 执行 Migration
  3. 部署应用到 Heroku
    1. 创建 Heroku 应用程序
    2. 部署应用
    3. 配置环境变量

接下来,我们就开始分步骤讲解如何一步步配置并搭建 NestJS、PostgreSQL 和 Heroku 平台的 Web 应用。

1. 准备工作
1.1 安装 Node.js 和 NestJS

首先,你需要在开发机器上安装 Node.js 和 NestJS。安装它们非常简单,只需要访问官方网站下载相应的二进制文件,然后运行安装程序。

安装完 Node.js 后,你可以使用 npmyarn 包管理器来安装 NestJS:

# 使用 npm 安装 NestJS
npm i -g @nestjs/cli

# 或使用 yarn 安装 NestJS
yarn global add @nestjs/cli
1.2 创建项目

安装完 NestJS 后,我们就可以使用 nestjs new 命令快速创建一个基础的 NestJS 项目。在这个项目中,我们将完成连接 PostgreSQL 数据库的操作。

要创建一个新的项目,请在终端中运行以下命令:

# 用 NestJS 创建新项目
nestjs new my-project

这将在本地创建一个名为 my-project 的新项目,并自动创建一些示例文件,包括 main.tsapp.module.ts 等文件。

1.3 安装依赖项

在项目创建完成后,我们需要安装一些必要的依赖项,包括 @nestjs/typeorm 和 PostgreSQL 驱动 pg,以及其他一些必要的依赖项。

请执行以下命令安装依赖项:

# 安装 NestJS 相关依赖项
npm i --save @nestjs/typeorm pg

# 安装其他必要的依赖项
npm i --save @nestjs/common @nestjs/core @nestjs/platform-express @nestjs/config @nestjs/microservices reflect-metadata rxjs
2. 连接 PostgreSQL
2.1 在 Heroku 上创建 PostgreSQL 数据库

首先,我们需要在 Heroku 上创建一个 PostgreSQL 数据库。这个步骤可以通过 Heroku CLI 或者在 Heroku 网站上操作完成。

在本教程中,我们将使用 Heroku CLI。请执行以下命令:

# 创建 Heroku 应用并添加 PostgreSQL 插件
heroku create my-app --addons=heroku-postgresql:hobby-dev

# 查看 Heroku 应用的信息
heroku info

# 获得 PostgreSQL 数据库连接信息
heroku pg:credentials:url

使用上述命令后,你将看到 Heroku 应用程序的 URL 和 PostgreSQL 数据库的连接信息。

2.2 配置 NestJS 与 PostgreSQL 的连接

有了 PostgreSQL 数据库的连接信息后,我们可以在 NestJS 项目中配置它,使我们的应用程序可以通过它来访问数据库。

在 NestJS 项目中,我们需要创建一个 ormconfig.js 文件,来配置 NestJS 和 PostgreSQL 的连接。请把下面的内容复制到该文件中:

module.exports = {
  type: 'postgres',
  url: process.env.DATABASE_URL,
  synchronize: true,
  entities: ['src/**/*.entity.ts'],
  migrations: ['src/migrations/**/*.ts'],
  migrationsTableName: 'migrations',
  cli: {
    migrationsDir: 'src/migrations',
  },
};

在上面的 ormconfig.js 文件中,我们使用 process.env.DATABASE_URL 这个环境变量来获取从 Heroku 获取的 PostgreSQL 数据库连接信息。

接下来,我们也需要在 NestJS 项目中的 app.module.ts 文件中引入 TypeOrmModule.forRoot() 方法。

请把以下内容添加到 app.module.ts 文件中:

import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';
import { AppController } from './app.controller';
import { AppService } from './app.service';

@Module({
  imports: [
    TypeOrmModule.forRoot({
      type: 'postgres',
      url: process.env.DATABASE_URL,
      synchronize: true,
      entities: ['src/**/*.entity.ts'],
      migrations: ['src/migrations/**/*.ts'],
      migrationsTableName: 'migrations',
      cli: {
        migrationsDir: 'src/migrations',
      },
    }),
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}
2.3 创建 Entity

在完成上面的步骤后,我们需要对应用程序进行更多的配置,使其可以使用数据库连接。

首先,我们将创建一个实体类,它将对应于数据库中的一个表。在这个实体类中,我们还要定义表映射的其他属性,诸如列的名称和类型等。

为了创建一个实体类,我们需要在 NestJS 项目中创建一个名为 users 的文件,并在其中定义一个名为 User 的实体类。这个示例用于在 PostgreSQL 数据库中创建一个名为 users 的表。

请把下面的内容复制到 users.entity.ts 文件中:

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

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

  @Column()
  firstName: string;

  @Column()
  lastName: string;

  @Column()
  email: string;

  @Column()
  bio: string;

  @Column()
  createdAt: Date;

  @Column()
  updatedAt: Date;
}

在上述代码中,我们使用 @Entity() 装饰器来定义这个类代表了一个数据库表。然后,使用 @Column() 装饰器来指定数据库表中的每一列的名称和类型。

2.4 执行 Migration

现在我们已经定义了一个实体类,接下来我们需要执行 Migration 操作,以便将实体转化为数据库中的一张表。

或者,我们可以使用 NestJS CLI 来自动执行 Migration 操作。请在终端输入以下命令:

# 创建一个数据库 Migration 文件
npm run typeorm:create-migration -- -n CreateTable

# 执行 Migration
npm run typeorm:run

以上命令中指定了 CreateTable 作为 Migration 的名称,这个名称可以自由设置。在执行完 Migration 操作后,users 表将被创建在 PostgreSQL 数据库中。

3. 部署应用到 Heroku

现在我们已经完成了使用 NestJS 和 PostgreSQL 连接数据库的配置,接下来,我们将演示如何将应用程序部署到 Heroku 平台上。

3.1 创建 Heroku 应用程序

首先,我们需要创建一个 Heroku 应用程序。请在终端中执行以下命令:

# 在 Heroku 上创建应用程序
heroku create my-app

# 查看 Heroku 应用程序信息
heroku info

# 指定 buildpack 源
heroku buildpacks:set https://github.com/heroku/heroku-buildpack-nodejs#v175 -a my-app

# 启用 Heroku 便携式运行时
heroku stack:set container -a my-app

# 添加 PostgreSQL 插件
heroku addons:create heroku-postgresql:hobby-dev -a my-app
3.2 部署应用

在完成上面的步骤后,我们就可以将应用部署到 Heroku 平台上了。要实现这个目标,我们可以通过执行以下命令来完成:

# 将当前分支推送到 Heroku
git push heroku master

执行上述命令后,应用程序将被部署到 Heroku 平台上,并自动从 Heroku 上的 Git 仓库部署该应用程序的代码。

3.3 配置环境变量

在部署应用程序之前,我们还需要为 Heroku 应用程序设置一些必要的环境变量,这些变量将用于与 PostgreSQL 数据库进行连接。

在 Heroku 应用程序的设置页面中,我们可以找到所有 Heroku 环境变量的列表。我们需要在这里添加以下变量:

  • DATABASE_URL - PostgreSQL 数据库的 URL
  • NODE_ENV - 设置为 production

现在,一切准备就绪了。如果一切顺利,你的应用程序现在应该已经成功部署到 Heroku 平台上了。