在现代网络开发中,建立强大而有效的数据库连接对于构建可扩展和可维护的应用程序至关重要。 Nestjs是Node.js的流行后端框架,为创建API和微服务提供了全面的生态系统。当与Prisma(高级数据库工具包)和用于容器化应用程序的平台Docker结合使用时,您可以为数据库驱动的应用程序实现优化的开发环境。在本指南中,我们将详细介绍使用Nestjs设置中的Prisma建立PostgreSQL连接的过程,这些过程均在Docker环境中。为了展示实施,我们还将创建一个书签API。
目录
- 简介
- 先决条件
- 设置Nestjs Project
- 为Postgresql配置Docker
- 安装和配置Prisma
- 与Prisma创建PostgreSQL连接
- 使用Prisma构建书签API
- 运行应用程序
1.简介
Nestjs是一个功能强大且可扩展的框架,使开发人员能够构建高效,可扩展和模块化的服务器端应用程序。另一方面,Prisma使用类型安全和查询构建API简化了数据库访问。通过将这些技术集成到Docker环境中,您可以确保在不同平台之间进行一致的开发和部署。
2.先决条件
在开始之前,请确保您的系统上安装了以下先决条件:
- node.js和npm:用于运行Nestjs应用程序。
- Docker:用于容器化PostgreSQL数据库。
- Nest CLI:用于生成Nestjs Project Files。
- Visual Studio代码(或任何首选代码编辑器):用于编写和编辑代码。
3.设置Nestjs项目
让我们从创建一个新的Nestjs项目开始。打开终端并执行以下命令:
# Install the Nest CLI globally (if already installed ignore this command)
npm install -g @nestjs/cli
# Create a new NestJS project
nest new nest-prisma-bookmark-api
导航到项目目录:
cd nest-prisma-bookmark-api
4.为PostgreSQL配置Docker
为了确保一个一致的数据库环境,我们将使用Docker设置PostgreSQL容器。在项目目录的根目录中使用以下内容创建一个Docker-compose.yml文件:
version: '3.8'
services:
postgres:
image: postgres:latest
environment:
POSTGRES_USER: nestjs
POSTGRES_PASSWORD: nestjs_password
POSTGRES_DB: bookmark_db
ports:
- '5432:5432'
networks:
- postgres_network
networks:
- postgres_network
此配置设置了带有用户,密码和数据库名称的PostgreSQL容器。
5.安装和配置Prisma
Prisma通过从数据模型中生成类型安全客户端来简化数据库交互。要安装Prisma,请运行:
npm install @prisma/cli
通过运行:
初始化Prisma
npx prisma init
遵循提示,然后选择使用Docker设置的PostgreSQL数据库。这将生成一个包含您数据库配置的Prisma文件夹。
6.与Prisma建立PostgreSQL连接
打开Prisma/schema.prisma文件并定义您的数据模型。对于我们的书签API示例,让我们创建一个书签模型:
model Bookmark {
id Int @id @default(autoincrement())
title String
url String
createdAt DateTime @default(now())
}
定义模式后,通过运行将更改应用于数据库:
npx prisma migrate dev
这将生成必要的数据库表。
7.使用Prisma构建书签API
为书签API创建一个新模块:
nest generate module bookmark
在生成的书签模块中,创建一个带有以下内容的书签。Entity.ts文件:
import { Prisma } from '.prisma/client';
export class Bookmark implements Prisma.BookmarkCreateInput {
id?: number;
title: string;
url: string;
createdAt?: Date;
}
现在,在同一模块中创建一个书签。Service.ts文件:
import { Injectable } from '@nestjs/common';
import { PrismaService } from 'src/prisma/prisma.service';
import { Bookmark } from './bookmark.entity';
@Injectable()
export class BookmarkService {
constructor(private readonly prisma: PrismaService) {}
async create(data: Bookmark): Promise<Bookmark> {
return this.prisma.bookmark.create({
data,
});
}
async findAll(): Promise<Bookmark[]> {
return this.prisma.bookmark.findMany();
}
}
最后,在模块中创建一个bookmark.controller.ts文件:
import { Controller, Get, Post, Body } from '@nestjs/common';
import { BookmarkService } from './bookmark.service';
import { Bookmark } from './bookmark.entity';
@Controller('bookmark')
export class BookmarkController {
constructor(private readonly bookmarkService: BookmarkService) {}
@Post()
async create(@Body() bookmarkData: Bookmark): Promise<Bookmark> {
return this.bookmarkService.create(bookmarkData);
}
@Get()
async findAll(): Promise<Bookmark[]> {
return this.bookmarkService.findAll();
}
}
8.运行应用程序
通过实施书签API,该运行应用程序了。使用Docker组成:
启动PostgreSQL容器
docker compose up -d
然后,启动Nestjs应用程序:
npm run start:dev
您的Nestjs应用程序具有Prisma集成,并且书签API现在正在启动并运行。您可以在http://localhost:3000/bookmark访问API。
结论
在本文中,我们探索了使用Nestjs应用程序中PRISMA建立PostgreSQL连接的过程。通过将这些技术与Docker相结合,您可以实现一个一致,有效的开发环境。书签API示例演示了Prisma和Nestjs的无缝集成,使您能够构建功能强大且可扩展的数据库驱动的应用程序。
这是一个示例项目存储库的链接,以更具体地演示本文中讨论的概念:Github Repo