A progressive Node.js framework for building efficient and scalable server-side applications.
Tech Stack: NestJS + Prisma + PostgresQL + GraphQL + Stripe + Docker-Compose
pnpm install prisma -D
pnpm npm install @prisma/client
# 生成 prisma.schema文件
pnpm prisma init
在.env
文件配置DATABASE_URL
DATABASE_URL="postgresql://root:123@localhost:5432/nest_shop_cart_db?schema=public"
# 配置来自于docker-compose配置的postgres
version: '3.9'
services:
postgres:
image: postgres:latest
ports:
- 5432:5432
volumes:
- ~/apps/postgres:/var/lib/postgresql/data
environment:
- POSTGRES_PASSWORD=123
- POSTGRES_USER=root
- POSTGRES_DB=nest_shop_cart_db
在prisma.schema
配置model
docker-compose up -d
启动 postgres服务
pnpm prisma migrate dev
初始化数据库,生成prisma client
pnpm prisma studio
来查看数据库GUI
import { Logger, Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { loggingMiddleware, PrismaModule } from 'nestjs-prisma';
@Module({
imports: [PrismaModule.forRoot({
isGlobal: true,
prismaServiceOptions: {
middlewares: [
loggingMiddleware({
logger: new Logger('PrismaMiddleware'),
logLevel: 'log',
}),
],
},
})],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
做了任何schema相关的更改,记得要evolving本地的prisma client Introduction to Prisma Client | Prisma Documentation
pnpm prisma generate
不然代码无法识别如 this.prisma.product.findMany()
中的model
NestJS | GraphQL - A progressive Node.js framework
// app.module.ts
@Module({
imports: [
ConfigModule.forRoot({ isGlobal: true }),
GraphQLModule.forRoot<ApolloDriverConfig>({
driver: ApolloDriver,
playground: true,
sortSchema: true,
autoSchemaFile: 'src/schema.graphql',
}),
// ...
],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {
}
然后执行nest g resource product
,会自动插入product相关的代码,包括schema.graphql
文件
// prisma/seed.ts
// 多准备一份seed数据,放在 prisma/seedData.ts
import products from './seedData';
import { PrismaService } from 'nestjs-prisma';
const prisma = new PrismaService();
(function seed() {
products.forEach(async (product) => {
await prisma.product.create({
data: {
name: product.name,
description: product.description,
price: product.price,
image: product.image,
brand: product.brand,
},
});
});
})();
在package.json
增加如下命令
{
"name": "nest-shop-cart",
"scripts": {
"db:seed": "prisma db seed",
"db:studio": "prisma studio"
},
"prisma": {
"seed": "ts-node prisma/seed.ts"
}
}
yarn run db:seed
初始化数据
yarn run db:studio
查看数据表
https://docs.stripe.com/get-started/development-environment?lang=node
brew install stripe/stripe-cli/stripe
stripe login
Introduction (GraphQL-Codegen)
因为pnpm的node_modules是通过软链接到全局的store,prisma client generate时没有将对应的类型文件生成到./nodu_modules/@prisma/client
路径,导致TS无法识别对应的类型
解决方案:将pnpm换回yarn或者npm即可
Nest is MIT licensed.