正如标题所述,我在 Next JS 应用程序中使用 Prisma 2。我有一个非常简单的架构:
model User {
id Int @id @default(autoincrement())
firstName String
middleName String?
firstLastname String
secondLastname String?
email String
role String
group Group? @relation(fields: [groupId], references: [id])
groupId Int?
activity Activity? @relation(fields: [activityId], references: [id])
activityId Int?
createdOn DateTime @default(now())
updatedOn DateTime @default(now())
}
model JobTitle {
id Int @id @default(autoincrement())
name String
createdOn DateTime @default(now())
updatedOn DateTime @default(now())
}
model Group {
id Int @id @default(autoincrement())
name String
users User[]
createdOn DateTime @default(now())
updatedOn DateTime …
Run Code Online (Sandbox Code Playgroud) 我将 next-auth 与 Prisma 和 Graphql 一起使用,我按照以下说明相应地设置了适配器和我的模型:https:
//next-auth.js.org/adapters/prisma
身份验证有效,但是当我检查会话对象时这里:
const { data: session, status } = useSession()
我没有看到身份证
我需要 ID 的原因是为了进行进一步的 GraphQL 查询。我现在使用电子邮件值通过电子邮件获取用户,但拥有可用的 ID 将是更好的选择。
我正在使用 Prisma 和 Next.js。当我尝试从 Prisma 中检索内容时,getStaticProps
它确实获取了数据,但我无法将其传递给主要组件。
export const getStaticProps = async () => {
const prisma = new PrismaClient();
const newsLetters = await prisma.newsLetters.findMany();
console.log(newsLetters);
return {
props: {
newsLetters: newsLetters,
},
};
};
Run Code Online (Sandbox Code Playgroud)
正如您在此图中看到的,它正在获取并打印内容。
但是当我通过时,我收到以下错误,将其作为道具传递
Reason: `object` ("[object Date]") cannot be serialized as JSON. Please only return JSON serializable data types.
Run Code Online (Sandbox Code Playgroud) 我将 next auth v4 与 next js 13 beta 和服务器组件一起使用,一切正常。但我有一种情况,我需要知道登录的用户 ID,因为我正在使用下一个身份验证,我可以访问会话,我可以使用 useSession() 但随后我需要使该组件成为客户端组件,所以我想在服务器上使用它,我可以在 API 中使用 getServerSession 因为我可以访问 req & res 对象,但在下一个带有新应用程序目录的 js beta 中,我不能这样做。如果您知道如何解决该问题,请告诉我。谢谢
import { getServerSession } from "next-auth";
import { authOptions } from "@/pages/api/auth/[...nextauth]";
const Test = async () => {
const user_id = 1; // How do I get user id from session, user_id is available in session
// I don't have access req & res object in server component.
const data = await getServerSession(request, response, authOptions); …
Run Code Online (Sandbox Code Playgroud) 我将 Prisma 与 Postgres 一起使用。由于在基础表中使用了不受支持的 tsvector 类型,我需要使用 $queryRaw 进行特定查询。在此查询中,我还需要使用“in”语句,其中“in”列表中的项目需要参数化。我已经尝试过这个
const ids = [41, 55]
const result = await prisma.$queryRaw`select * from users where id in (${ids})`;
Run Code Online (Sandbox Code Playgroud)
但我遇到了内核恐慌
Run Code Online (Sandbox Code Playgroud)PANIC in /root/.cargo/git/checkouts/rust-postgres-dc0fca9be721a90f/8a61d46/postgres-types/src/lib.rs:762:18 expected array type
我也尝试过这个...
const result = await prisma.$queryRaw`select * from users where id in (${ids.join(',')})`;
Run Code Online (Sandbox Code Playgroud)
但后来我收到这个错误...
Raw query failed. Code: `22P03`. Message: `db error: ERROR: incorrect binary data format in bind parameter 1`
Run Code Online (Sandbox Code Playgroud)
我认为 prisma 使用的 sql-template-tag 库有一种支持此功能的方法,因此在安装和导入它之后,我尝试了这个..
const result = await prisma.$queryRaw`select * from users where id in …
Run Code Online (Sandbox Code Playgroud) 您好,我遇到了这个问题,我尝试在 nextjs 中使用 graphql 进行订阅,但是出现了问题,我不知道如何修复它。我遇到 websocket 错误 - “与 'ws:/_next/webpack-hmr' 的 WebSocket 连接失败:WebSocket 在建立连接之前已关闭。”
您可以在此处检查代码 - https://github.com/LoQeN00/messenger-2.0.git
我有什么办法可以解决这个问题吗?我最近更新到 Ubuntu 22.04 在使用 Prisma 时遇到问题。我无法运行我的项目。我使用“@prisma/client”:“2.20.1”
错误:未知的二进制目标 debian-openssl-3.0.x 并且没有提供自定义二进制文件错误命令失败,退出代码为 1。
我试图在 Prisma ORM 的一个模型中建立两个 1:1 关系,但出现以下错误:
验证模型“Person”时出错:检测到不明确的关系。模型中的字段
placeOfBirth
和字段均指的是。请通过添加 为它们提供不同的关系名称。placeOfDeath
Person
Place
@relation(<name>)
我的棱镜架构:
model Place {
id Int @id @default(autoincrement())
name String
persons Person[]
}
model Person {
id Int @id @default(autoincrement())
name String
placeOfBirthId Int
placeOfDeathId Int
placeOfBirth Place @relation(fields: [placeOfBirthId], references: [id])
placeOfDeath Place @relation(fields: [placeOfDeathId], references: [id])
}
Run Code Online (Sandbox Code Playgroud)
完全不明白。
我想知道Prisma Client中是否有一种方法可以通过id批量删除数据库记录。
像这样的东西似乎不存在:
const idsToDelete = [5, 29, 255]
prisma.post.deleteMany({
where: {
id: {
equals: idsToDelete
}
}
})
Run Code Online (Sandbox Code Playgroud)
该文档提到了标量列表过滤器的概念,但这似乎不支持数字列表,或者可能不支持deleteMany
.
在幕后,我希望有一个 SQLDELETE ... WHERE IN
子句。我不想:
我开始围绕应用程序中的 prisma(v3.6.0) 使用情况编写测试。
为此,我遵循了官方 prisma 页面使用 prisma 进行单元测试,并且我正在使用jest-mock-extended
.
我的问题是,在使用模拟的 prisma 函数时出现打字稿错误:
describe('User routes', () => {
it('should respond success with array of users', async () => {
prismaMock.user.findMany.mockResolvedValue([]); // <- here is the error
}
}
Run Code Online (Sandbox Code Playgroud)
Type of property 'AND' circularly references itself in mapped type
Run Code Online (Sandbox Code Playgroud)
github Testing with prisma上有一些关于这个问题的讨论。我从这次讨论中得到了 3 个选择:
"skipLibCheck": true
到 tsconfig.json。这破坏了我的代码中的一些内容并且不能解决我的问题"strictNullChecks": true
,也没有效果//@ts-ignore
线。这有效地消除了错误,并且测试顺利进行虽然我能够进行测试,但我不想在测试中到处都忽略这个错误,并且忽略错误只是一个好主意,直到它不是。
有人对这个问题有更多信息或建议吗?
prisma ×10
next.js ×3
javascript ×2
next-auth ×2
prisma2 ×2
reactjs ×2
beta ×1
graphql ×1
next.js13 ×1
openssl ×1
orm ×1
postgresql ×1
schema ×1
serializable ×1
session ×1
testing ×1
typescript ×1