nextjs 中使用Prisma开发接口

本文介绍了如何在Next.js项目中利用Prisma这个数据库工具链来开发接口。内容包括Prisma的基本概念,如连接数据库、类型安全的自动补全功能,以及在项目中安装、初始化Prisma的步骤。接着详细讲解了如何定义数据库表、安装prisma/client,并在Next.js的pages/api目录下创建post和comment接口,实现新增、查询、删除和更新操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

prisma 是什么

Prisma是一个开源的数据库工具链项目,帮助开发人员更快地构建应用程序并减少错误,支持PostgreSQL、MySQL、MongoDB、SQL Server和SQLite。感兴趣的可以去这里查看=》中文网站

Prisma 主要是用作连接数据库的并支持TS 的自动补全

在项目中使用主要有三个步骤

安装
npm install prisma 
初始化
npx prisma init

初始化会生成 prisma 文件夹与schema.prisma,DATABASE_URL在本地.env.local里面配置你的mysql数据库链接地址

// This is your Prisma schema file,
// learn more about it in the docs: https://pris.ly/d/prisma-schema

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

datasource db {
  provider = "mysql"
  url      = env("DATABASE_URL")  //DATABASE_URL="mysql://root:root@localhost:5432/mydb?schema=public"
}
定义你的数据库表名与字段名称

定义的详情可以看文档
这里简单定义一个Post 与Comment这里一个Post 对应多个Comment


model Post {
  id String @id @default(cuid()) 
  title String 
  content String? @db.LongText
  publisted Boolean @default(false)
  comments Comment[] 
  @@map(name:"posts")
}

model Comment{
  id String @id @default(cuid())
  content String
  publisted Boolean @default(false)
  postId String?
  post Post? @relation(fields: [postId],references: [id])
}
安装prisma/client
npm install @prisma/client
在nextjs 根目录新建lib文件夹 db.ts
import { PrismaClient } from "@prisma/client"

declare global {
  // eslint-disable-next-line no-var
  var cachedPrisma: PrismaClient
}

let prisma: PrismaClient
if (process.env.NODE_ENV === "production") {
  prisma = new PrismaClient()
} else {
  if (!global.cachedPrisma) {
    global.cachedPrisma = new PrismaClient()
  }
  prisma = global.cachedPrisma
}

export const db = prisma

在pages/api文件夹下新建
  • /post/index.ts
  • /comment/index.ts
post 接口
新增
        const {content,title} = req.body
        const reslut = db.post.create({
          data:{
            content:content,
            title:title
          }
        })
        if(reslut){
          res.status(200).json({
            message:"添加成功",
            data:reslut
          })
        }
查询
      const {title} = req.body
      const reslut = db.post.findFrist({
        where:{
          title:title
        }
      })
      if(reslut){
        res.status(200).json({
          message:"查询成功",
          data:reslut
        })
      }
删除
      const {title} = req.body
      const reslut = db.post.delete({
        where:{
          title:title
        }
      })
      if(reslut){
        res.status(200).json({
          message:"删除成功",
          data:reslut
        })
      }
更新
      const {id,title,content} = req.body
      const reslut = db.post.delete({
        where:{
          id:id
        },
        data:{
          title:title,
          content:content,
        }
      })
      if(reslut){
        res.status(200).json({
          message:"更新成功",
          data:reslut
        })
      }
完整文件
import db from '@/lib/prisma'
import { NextApiRequest,NextApiResponse } from "next";

export default async function handler(req:NextApiRequest,res:NextApiResponse){
    const {method} = req
    if(method==="POST"){
        const {content,title} = req.body
        const reslut = db.post.create({
          data:{
            content:content,
            title:title
          }
        })
        if(reslut){
          res.status(200).json({
            message:"添加成功",
            data:reslut
          })
        }
    }else if(method==='GET'){
      const {title} = req.body
      const reslut = db.post.findFrist({
        where:{
          title:title
        }
      })
      if(reslut){
        res.status(200).json({
          message:"查询成功",
          data:reslut
        })
      }
    }else if(method==='DELETE'){
      const {title} = req.body
      const reslut = db.post.delete({
        where:{
          title:title
        }
      })
      if(reslut){
        res.status(200).json({
          message:"删除成功",
          data:reslut
        })
      }
    }else if(method==='PUT'){
      const {id,title,content} = req.body
      const reslut = db.post.delete({
        where:{
          id:id
        },
        data:{
          title:title,
          content:content,
        }
      })
      if(reslut){
        res.status(200).json({
          message:"更新成功",
          data:reslut
        })
      }
    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值