NestJs与Prisma连接mysql数据库

1 前提条件

1.1 下载nodejs并安装,cmd输出以下就是成功了

	$node -v
	v14.21.3
	$ npm -v
	6.14.18

1.2 起步,用nest脚手架,找个放项目的目录

1. 安装依赖
	$ npm i -g @nestjs/cli 
2. 使用Nest CLI建建项目
	$ nest new project-name // 出现提示,选择npm,就会自动创建一个nest项目脚手架
3. 用Nest CLI 快速创建resource
	$ nest g resource
	? What name would you like to use for this resource (plural, e.g., "users")? user 
	? What transport layer do you use? REST API
	? Would you like to generate CRUD entry points? Yes
会创建出user的目录在项目中,里面包含dto、entities、controller、module、service
4. 在根目录下创建一个.env的文件 
5. 调用配置文件的值需要安装依赖文件
	$ npm i --save @nestjs/config

1.3 一个在运行的Mysql数据库和一张user表的库

2 prisma的引入

2.1 需要安装的依赖

1. 将 Prisma CLI 作为开发依赖项添加到项目中
	$ npm install prisma --save-dev
2. 通过使用以下命令创建Prisma 模式文件模板来设置 Prisma 项目:
	$ npx prisma init
	这个命令会生一个一个prisma的新目录也包含一个schema.prisma的文件夹
3. 安装prisma/clien依赖
	$ npm install @prisma/client

2.2 修改schema.prisma配置,添加一个User表数据

generator client {
  provider = "prisma-client-js"
}

datasource db {
  provider = "mysql"	// 这里默认是postgresql,可以根据自己的数据库不同修改
  url      = env("DATABASE_URL")
}

model User {	// 对应数据库User表字段
  id    Int     @id @default(autoincrement())
  age   Int?
  name  String?
  nickname String?
}

2.3 在根目录下的.env文件中添加数据库配置

注意这里的DATABASE_URL,与schema.prisma上的是对应的

DATABASE_URL=mysql://root:root@localhost:3306/learndata
DATABASE_URL_WITH_SCHEMA=${DATABASE_URL}?schema=public

2.4 对 Prisma.schema 进行更改后,都需要执行命令去更新生成的 Prisma Client 代码

	$ npx prisma generate
	
	输出以下则是成功:
		Environment variables loaded from .env
		Prisma schema loaded from prisma\schema.prisma
		
		✔ Generated Prisma Client (4.12.0 | library) to .\node_modules\@prisma\client in 71ms
		You can now start using Prisma Client in your code. Reference: https://pris.ly/d/client
		```
		import { PrismaClient } from '@prisma/client'
		const prisma = new PrismaClient()
		```

3. nestjs中应用prisma,创建例子

3.1 user.service中

1.引入import { PrismaClient } from '@prisma/client'
2.create 方法创建调用:
	async create(createUserDto: CreateUserDto) {
    	const prisma = new PrismaClient()
    	return await prisma.user.create({data:createUserDto});
	}

3.2 user.controller 中

1.constructor中引入UserService
	 constructor(private readonly userService: UserService) {}
2.创建方法修改
	  @Post()
	  create(@Body() createUserDto: CreateUserDto) {
	    return this.userService.create(createUserDto);
	  }

4. Postman访问/user/create

传入

{
"name":"bb",
"age":1,
"nickname":"balabal"
}

数据库就有一条数据了

在这里插入图片描述

5.分析

简单的引入prisma,prisma client 的创建还需要封装放上下文中,不能每次用都去new

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
@icapps/nestjs-prisma是一个基于Prisma ORM的NestJS模块,它可以帮助我们快速地集成Prisma ORM到NestJS应用程序中。如果你需要集成多个数据库,可以按照以下步骤进行: 1. 首先,在项目中安装Prisma ORM,并为每个数据库创建一个Prisma schema。 2. 创建一个新的Prisma client实例,该实例将连接到特定的数据库。你可以在NestJS的providers中创建多个Prisma服务,每个服务都使用不同的Prisma client实例。 3. 在使用@icapps/nestjs-prisma模块时,你可以将不同的Prisma服务注入到不同的模块或控制器中,以便在应用程序中访问多个数据库。 下面是一个简单的示例,展示了如何在NestJS应用程序中集成多个Prisma服务: ```typescript import { Module } from '@nestjs/common'; import { PrismaClient } from '@prisma/client'; import { PrismaService } from '@icapps/nestjs-prisma'; @Module({ providers: [ { provide: 'DB_ONE', useFactory: () => new PrismaClient({ datasources: { db: { url: 'XXXXXXXX' } } }), }, { provide: 'DB_TWO', useFactory: () => new PrismaClient({ datasources: { db: { url: 'XXXXXXXX' } } }), }, { provide: 'DB_THREE', useFactory: () => new PrismaClient({ datasources: { db: { url: 'XXXXXXXX' } } }), }, { provide: 'DB_FOUR', useFactory: () => new PrismaClient({ datasources: { db: { url: 'XXXXXXXX' } } }), }, PrismaService, ], }) export class AppModule {} ``` 在上面的示例中,我们创建了四个不同的Prisma服务,每个服务使用不同的Prisma client实例,并将它们的provider名称分别设置为`'DB_ONE'`、`'DB_TWO'`、`'DB_THREE'`和`'DB_FOUR'`。然后,我们将这些服务注入到应用程序的providers列表中,并为每个服务指定相应的Prisma client实例。最后,我们还将@icapps/nestjs-prisma的PrismaService也添加到providers中,以便在整个应用程序中访问Prisma服务。 当我们需要在控制器或模块中使用Prisma时,可以通过注入相应的Prisma服务来访问不同的数据库,例如: ```typescript import { Controller, Get, Inject } from '@nestjs/common'; import { PrismaClient } from '@prisma/client'; @Controller('users') export class UsersController { constructor( @Inject('DB_ONE') private readonly dbOne: PrismaClient, @Inject('DB_TWO') private readonly dbTwo: PrismaClient, @Inject('DB_THREE') private readonly dbThree: PrismaClient, @Inject('DB_FOUR') private readonly dbFour: PrismaClient, ) {} @Get() async getUsers() { const users1 = await this.dbOne.user.findMany(); const users2 = await this.dbTwo.user.findMany(); const users3 = await this.dbThree.user.findMany(); const users4 = await this.dbFour.user.findMany(); return { users1, users2, users3, users4 }; } } ``` 在上面的示例中,我们在控制器中注入了四个不同的Prisma服务,每个服务使用不同的Prisma client实例。然后,我们可以使用这些服务来查询不同的数据库,并将结果返回给客户端。 希望这个示例能够帮助你实现NestJS集成多个数据库
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值