📅  最后修改于: 2023-12-03 15:03:09.638000             🧑  作者: Mango
当今 Web 应用的开发中,特别重视效率和可靠性,NestJS 框架就能做到这一点,它是一个基于 TypeScript 的 Node.js 框架,通过其模块化体系结构和丰富的生态系统,可以帮助开发者快速构建可扩展的 Web 应用。
在本文中,我们将介绍如何使用 NestJS、PostgreSQL 和 Heroku 平台搭建 Web 应用,以下是整个教程的大纲:
接下来,我们就开始分步骤讲解如何一步步配置并搭建 NestJS、PostgreSQL 和 Heroku 平台的 Web 应用。
首先,你需要在开发机器上安装 Node.js 和 NestJS。安装它们非常简单,只需要访问官方网站下载相应的二进制文件,然后运行安装程序。
安装完 Node.js 后,你可以使用 npm
或 yarn
包管理器来安装 NestJS:
# 使用 npm 安装 NestJS
npm i -g @nestjs/cli
# 或使用 yarn 安装 NestJS
yarn global add @nestjs/cli
安装完 NestJS 后,我们就可以使用 nestjs new
命令快速创建一个基础的 NestJS 项目。在这个项目中,我们将完成连接 PostgreSQL 数据库的操作。
要创建一个新的项目,请在终端中运行以下命令:
# 用 NestJS 创建新项目
nestjs new my-project
这将在本地创建一个名为 my-project
的新项目,并自动创建一些示例文件,包括 main.ts
和 app.module.ts
等文件。
在项目创建完成后,我们需要安装一些必要的依赖项,包括 @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
首先,我们需要在 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 数据库的连接信息。
有了 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 {}
在完成上面的步骤后,我们需要对应用程序进行更多的配置,使其可以使用数据库连接。
首先,我们将创建一个实体类,它将对应于数据库中的一个表。在这个实体类中,我们还要定义表映射的其他属性,诸如列的名称和类型等。
为了创建一个实体类,我们需要在 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()
装饰器来指定数据库表中的每一列的名称和类型。
现在我们已经定义了一个实体类,接下来我们需要执行 Migration 操作,以便将实体转化为数据库中的一张表。
或者,我们可以使用 NestJS CLI 来自动执行 Migration 操作。请在终端输入以下命令:
# 创建一个数据库 Migration 文件
npm run typeorm:create-migration -- -n CreateTable
# 执行 Migration
npm run typeorm:run
以上命令中指定了 CreateTable
作为 Migration 的名称,这个名称可以自由设置。在执行完 Migration 操作后,users
表将被创建在 PostgreSQL 数据库中。
现在我们已经完成了使用 NestJS 和 PostgreSQL 连接数据库的配置,接下来,我们将演示如何将应用程序部署到 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
在完成上面的步骤后,我们就可以将应用部署到 Heroku 平台上了。要实现这个目标,我们可以通过执行以下命令来完成:
# 将当前分支推送到 Heroku
git push heroku master
执行上述命令后,应用程序将被部署到 Heroku 平台上,并自动从 Heroku 上的 Git 仓库部署该应用程序的代码。
在部署应用程序之前,我们还需要为 Heroku 应用程序设置一些必要的环境变量,这些变量将用于与 PostgreSQL 数据库进行连接。
在 Heroku 应用程序的设置页面中,我们可以找到所有 Heroku 环境变量的列表。我们需要在这里添加以下变量:
DATABASE_URL
- PostgreSQL 数据库的 URLNODE_ENV
- 设置为 production
现在,一切准备就绪了。如果一切顺利,你的应用程序现在应该已经成功部署到 Heroku 平台上了。