首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“消息”:“无法读取未定义的属性‘查询’”,

“消息”:“无法读取未定义的属性‘查询’”,
EN

Stack Overflow用户
提问于 2019-08-30 01:16:08
回答 1查看 2.4K关注 0票数 0

我现在的环境是prisma的图形瑜伽。当试图运行查询时,我会遇到“无法读取未定义的属性‘查询’”错误。我认为这是因为它不能从上下文中读取

这个问题发生在我重构代码和设置Prisma连接时。在启动服务器时,我已经将prisma包含在上下文中,但它似乎在任何地方都不可用。

错误

代码语言:javascript
复制
[nodemon] starting `babel-node src/index.js`
The server is up!
TypeError: Cannot read property 'query' of undefined
    at Object.query (G:\laragon\www\engine-backend\src\resolvers/Query.js:23:23)
    at G:\laragon\www\engine-backend\node_modules\graphql-tools\src\schemaGenerator.ts:695:54
    at next (G:\laragon\www\engine-backend\src\directives/directives.js:21:12)
    at field.resolve (G:\laragon\www\engine-backend\node_modules\graphql-tools\src\schemaGenerator.ts:692:18)
    at resolveFieldValueOrError (G:\laragon\www\engine-backend\node_modules\graphql\execution\execute.js:467:18)
    at resolveField (G:\laragon\www\engine-backend\node_modules\graphql\execution\execute.js:434:16)
    at executeFields (G:\laragon\www\engine-backend\node_modules\graphql\execution\execute.js:275:18)
    at executeOperation (G:\laragon\www\engine-backend\node_modules\graphql\execution\execute.js:219:122)
    at executeImpl (G:\laragon\www\engine-backend\node_modules\graphql\execution\execute.js:104:14)
    at Object.execute (G:\laragon\www\engine-backend\node_modules\graphql\execution\execute.js:64:63)

我试过搜索和搜索,但似乎找不到任何答案。

这是代码

代码语言:javascript
复制
// index.js
const { GraphQLServer } = require("graphql-yoga")
require('dotenv').config()
const { checkJwt } = require("./middleware/jwt")
const { getUser } = require("./middleware/getUser")
const { importSchema } = require("graphql-import")
const { makeExecutableSchema } = require("graphql-tools")
const { directiveResolvers } = require("./directives/directives")
import { resolvers } from './resolvers/index'
import { prisma } from './prisma/prisma'


const schema = makeExecutableSchema({
  typeDefs: importSchema("./src/schema.graphql"),
  resolvers,
  directiveResolvers
})



const server = new GraphQLServer({
  schema,
  context: req => ({
    ...req,
    prisma
  })
})

server.express.post(
  server.options.endpoint,
  checkJwt,
  (err, req, res, next) => {
    if (err) return res.status(401).send(err.message)
    next()
  }
)
server.express.post(server.options.endpoint, (req, res, next) =>
  getUser(req, res, next, prisma)
)

server.start({ port: process.env.PORT || 3000 }, () => {
  console.log('The server is up!')
})
代码语言:javascript
复制
//prisma/prisma.js
import { Prisma } from 'prisma-binding'
require('dotenv').config()
import { fragmentReplacements } from '../resolvers/index'

const prisma = new Prisma({
//   fragmentReplacements: extractFragmentReplacements(resolvers),
  typeDefs: "src/generated/prisma.graphql",
  endpoint: process.env.PRISMA_ENDPOINT,
  secret: process.env.PRISMA_SECRET,
//   debug: true,
  fragmentReplacements
})

export { prisma as default }
代码语言:javascript
复制
// resolvers/Query.js
const Query = {
    users (parent, args, { prisma }, info ) {
      prisma.query.users(null, info)
    },
    async leadPhones (parent, args, { prisma }, info) {
      return prisma.query.leadPhones(null, info)
    },

}
export { Query as default}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-30 02:01:29

您将Prisma实例导出为默认导出:

代码语言:javascript
复制
export { prisma as default }

所以您应该将它作为缺省值导入。

代码语言:javascript
复制
import prisma from './prisma/prisma'

将其作为命名导出导入将导致结果变量与undefined相等。有关命名导出和默认导出之间的差异,请参见这里

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57719343

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档