GraphQL:TypeError:无法读取未定义的属性
Posted
技术标签:
【中文标题】GraphQL:TypeError:无法读取未定义的属性【英文标题】:GraphQL: TypeError: Cannot read property of undefined 【发布时间】:2020-12-05 16:41:18 【问题描述】:我有一个 Apollo GraphQL 项目,我在其中创建了自己的查询和突变。我已经使用了模拟数据并且查询和突变工作正常。但是当我尝试使用 Sequelize ORM 时,我收到了错误
"TypeError: Cannot read property 'getListings' of undefined",
" at listings (/home/ayman/Desktop/apollo-graphql/graphql-app/functions/graphql.js:50:19)",
" at field.resolve (/home/ayman/Desktop/apollo-graphql/graphql-app/node_modules/graphql-extensions/dist/index.js:134:26)"
graphql.js
中的查询和突变:
const ApolloServer, gql = require("apollo-server-lambda");
const Listing, User = require("../db");
const jwt = require("jsonwebtoken");
const typeDefs = gql`
type Query
listings: [Listing!]!
type Mutation
createListing(input: CreateListingInput!): Listing!
input CreateListingInput
title: String!
description: String
url: String!
notes: String
type Contact
id: ID!
name: String!
company: Company
email: String
notes: String
type Company
id: ID!
name: String!
logo: String
listings: [Listing!]!
url: String
type Listing
id: ID!
title: String!
description: String
url: String!
notes: String
company: Company
contacts: [Contact!]!
`;
const resolvers =
Query:
listings(_, __, user )
return user.getListings();
,
,
Mutation:
createListing(_, input , user )
return Listing.create( ...input, userId: user.id );
,
,
;
const server = new ApolloServer(
typeDefs,
resolvers,
);
exports.handler = server.createHandler();
我有 Sequilize 和 Postgres 数据库:
db.js
const Sequelize = require("sequelize");
const sequelize = new Sequelize(process.env.DB_CONNECTION_STRING,
dialect: "pg",
dialectModule: require('pg'),
dialectOptions:
ssl: true,
,
);
class User extends Sequelize.Model
User.init(
email: Sequelize.STRING,
password: Sequelize.STRING,
,
sequelize,
modelName: "user",
);
class Listing extends Sequelize.Model
Listing.init(
title: Sequelize.STRING,
description: Sequelize.TEXT,
url: Sequelize.STRING,
notes: Sequelize.TEXT,
,
sequelize,
modelName: "listing",
);
Listing.belongsTo(User);
User.hasMany(Listing);
exports.sequelize = sequelize;
exports.User = User;
exports.Listing = Listing;
Github Link
使用netlify dev
运行
转到网址:http://localhost:8888/.netlify/functions/graphql
GraphQL 查询示例
listings
id
title
description
url
company
name
url
【问题讨论】:
你在哪里创建context
对象?
我正在使用来自 db.js
的 user
作为 Apollo 的 resolver 的一部分。
看起来您正在尝试使用解析器的第三个参数,即 context
- apollographql.com/docs/apollo-server/data/resolvers/…,但您从未将 context
初始化函数添加到 ApolloServer
构造函数。
【参考方案1】:
我明白了,您正在尝试从上下文访问用户对象。请检查上下文定义。它应该显式返回一个包含用户对象的对象。
【讨论】:
我该怎么做? 请查看配置Apollo服务器的代码。上下文作为 apollo 服务器配置的键传递。【参考方案2】:return user.getListings();
你可能是指用户,因为用户是未定义的
【讨论】:
试过了,但报同样的错误。return user.getListings();
属于自定义 Apollo 解析器,用于从数据源获取详细信息。以上是关于GraphQL:TypeError:无法读取未定义的属性的主要内容,如果未能解决你的问题,请参考以下文章
初学者 GraphQL 和 Drupal - 静态查询返回 TypeError:无法读取未定义的属性“allNodeData”
Nativewscript-vue graphql:TypeError:无法读取未定义的属性“地图”
如何修复 TypeError:在使用 bcryptjs 对 GraphQL 突变进行哈希密码期间无法读取未定义的属性“哈希”?