繁体   English   中英

Prisma 抛出错误“TypeError: cannot read property findmany of undefined”

[英]Prisma throws an error "TypeError: cannot read property findmany of undefined"

我想制作一个聊天应用程序来练习使用 graphql 和节点,对于我使用 prisma 的数据库。 我正在做本教程中的所有事情。

https://www.howtographql.com/graphql-js/0-introduction/

我只是更改了变量名。

所以我有这段代码

const { PrismaClient } = require('@prisma/client')
const prisma = new PrismaClient()


const resolvers = {
  Query: {
    history: async (parent, args, context) => {
      return context.prisma.Messages.findMany()
    },
  },
  Mutation: {
    post: (parent, args, context) => {
      const newMessage = context.prisma.Messages.create({
        data: {
          username: args.username,
          message: args.message,
        },
      })
      return newMessage
    },
  },
}

const server = new GraphQLServer({
  typeDefs: './src/schema.graphql',
  resolvers,
  context: {
    prisma,
  }
})
server.start(() => console.log(`Server is running on http://localhost:4000`))

作为我的 index.js

这是我的 schema.prisma

  provider = "sqlite"
  url      = "file:./dev.db"
}


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


model Message {
  id       Int      @id @default(autoincrement())
  sendedAt DateTime @default(now())
  message  String
  username String
}

脚本.js

const { PrismaClient } = require("@prisma/client")


const prisma = new PrismaClient()


async function main() {
  const newMessage = await prisma.Messages.create({
    data: {
      message: 'Fullstack tutorial for GraphQL',
      username: 'www.howtographql.com',
    },
  })
  const allMessages = await prisma.Messages.findMany()
  console.log(allMessages)
}


main()
  .catch(e => {
    throw e
  })
  // 5
  .finally(async () => {
    await prisma.disconnect()
  })

和架构.graphql

type Query {
  history: [Message!]!
}

type Mutation {
  post(username: String!, message: String!): Message!
}

type Message {
  id: ID!
  message: String!
  username: String!
}

这就是我在操场上得到的

  "data": null,
  "errors": [
    {
      "message": "Cannot read property 'findMany' of undefined",
      "locations": [
        {
          "line": 2,
          "column": 3
        }
      ],
      "path": [
        "history"
      ]
    }
  ]
}

请帮忙

应该注意它实际上不是小写而是驼峰式

示例

Model 名称: Message -> Prisma 客户端名称: message

Model 名称: MessagePerUser -> Prisma 客户端名称: messagePerUser

我设法解决了这个问题。 实际上,我所需要的只是使用与 schema.prisma 相同但小写的名称

想补充一下答案

基本上,在调用 await prisma.User.create时,prisma 允许用户 model 大写,但在调用其他模型(如prisma.messages.create)时,m 必须为小写。 本质上,对于所有 prisma 调用,模型应该是小写的。 希望这能回答您的问题,prisma 不会将此错误标记出来

在 prisma Client 中使用表名作为 camelCase 进行查询

例子:表名是: StudentData

然后根据表名 prisma 使用 camelCase。 studentData ();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM