graphql.js:即使解析器正在为 sequilize 查询返回值,字段仍为空
graphql.js: field is null even though resolver is returning value for sequilize query
我有以下 graphql 架构,我正在尝试执行 businessUser 查询
type Query {
businessUser(id: String!): BusinessUser
}
type BusinessUser {
id: ID!,
firstName: String,
lastName: String,
email: String,
posts: [BusinessPostFormat]
}
type BusinessPostFormat {
postId: Int,
user: String,
isActive: Boolean,
postText: String
}
在我的解析器中,我加入我的 Post table 和我的业务 Post table 以检索 'isActive' 列。当我打印出 Sequilize 返回的内容时,我看到我正在返回应该映射到 BusinessPostFormat 类型的数据对象:
post {
dataValues:
{ postId: '188',
postText: 'blah blah blah',
user: 'userName',
isActive: false },
然而,当我在 graphiql 中执行查询时,isActive 字段返回为空。如果我看到解析器返回的正是 BusinessPostFormat 类型所期望的,我不明白为什么会这样?
解析函数如下:
const resolvers = {
Query: {
businessUser(_, args) {
return BusinessUser.findById(args.id);
}
},
BusinessUser: {
posts(businessUser) {
return businessUser.getPosts({
attributes: {
include: [[Sequelize.literal('business_posts.is_active'), 'isActive']],
exclude: ['business_user_id']
},
include: [{ model: BusinessPost, attributes: ['is_active'] }]
})
},
}
也许您忽略了 Sequelize 使用实例的事实 http://docs.sequelizejs.com/manual/tutorial/instances.html,也许这就是本例中所缺少的事实。
试试这个。
return Entries.findAll().then(entries => {
return entries.map(e => e.get({ plain: true }));
})
我有以下 graphql 架构,我正在尝试执行 businessUser 查询
type Query {
businessUser(id: String!): BusinessUser
}
type BusinessUser {
id: ID!,
firstName: String,
lastName: String,
email: String,
posts: [BusinessPostFormat]
}
type BusinessPostFormat {
postId: Int,
user: String,
isActive: Boolean,
postText: String
}
在我的解析器中,我加入我的 Post table 和我的业务 Post table 以检索 'isActive' 列。当我打印出 Sequilize 返回的内容时,我看到我正在返回应该映射到 BusinessPostFormat 类型的数据对象:
post {
dataValues:
{ postId: '188',
postText: 'blah blah blah',
user: 'userName',
isActive: false },
然而,当我在 graphiql 中执行查询时,isActive 字段返回为空。如果我看到解析器返回的正是 BusinessPostFormat 类型所期望的,我不明白为什么会这样?
解析函数如下:
const resolvers = {
Query: {
businessUser(_, args) {
return BusinessUser.findById(args.id);
}
},
BusinessUser: {
posts(businessUser) {
return businessUser.getPosts({
attributes: {
include: [[Sequelize.literal('business_posts.is_active'), 'isActive']],
exclude: ['business_user_id']
},
include: [{ model: BusinessPost, attributes: ['is_active'] }]
})
},
}
也许您忽略了 Sequelize 使用实例的事实 http://docs.sequelizejs.com/manual/tutorial/instances.html,也许这就是本例中所缺少的事实。 试试这个。
return Entries.findAll().then(entries => {
return entries.map(e => e.get({ plain: true }));
})