javascript Prisma抛出错误“类型错误:无法读取属性findmany of undefined”

l5tcr1uw  于 2022-12-02  发布在  Java
关注(0)|答案(4)|浏览(298)

我想做一个聊天应用程序来练习使用graphql和node,对于数据库我使用了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
这是我模式。

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
}

script.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!
}

这就是我在我的Playground得到的

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

请帮帮忙

bvn4nwqk

bvn4nwqk1#

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

mtb9vblg

mtb9vblg2#

请注意,它实际上不是小写字母,而是camel case

示例

型号名称:Message-〉Prisma客户端名称:message
型号名称:MessagePerUser-〉Prisma客户端名称:messagePerUser

mxg2im7a

mxg2im7a3#

想补充一下答案
基本上,当调用awaitprisma.User.create时,prisma允许User模型使用大写字母,但是当调用其他模型如prisma.messages.create时,m必须使用小写字母。本质上,对于所有prisma调用,模型都应该使用小写字母。希望这能回答你的问题,prisma不会标记出这个错误

nwsw7zdq

nwsw7zdq4#

在Prisma客户端中使用表名作为camelCase进行查询
示例:表名为:StudentData
然后根据表名prisma.studentData.findMany()使用camelCase;

相关问题