node.js graphql/sequelize 服务器为链接属性返回 null
Posted
技术标签:
【中文标题】node.js graphql/sequelize 服务器为链接属性返回 null【英文标题】:node.js graphql/sequelize server returns null for linked properties 【发布时间】:2018-06-29 10:51:57 【问题描述】:我有一个 node.js 服务器,它使用 sequelize 和 graphql 来提供 GraphQL 端点。
在 GraphQL 查询输出中,以某种方式与 belongsTo
链接的对象字段始终为 null
。
这是我的 graphql typedef:
type Student
id: ID!
name: String!
age: Int!
schoolClass: SchoolClass
type SchoolClass
id: ID!
title: String!
sequelize 模型是这样定义的
const SchoolClass = sequelize.define('SchoolClass',
title: Sequelize.STRING
);
const Student = sequelize.define('Student',
name: Sequelize.STRING,
age: Sequelize.TINYINT
);
Student.belongsTo(SchoolClass);
解析器是
students (root, args, context)
return models.Student.findAll(, context);
查询:
students
id, name, age, schoolClass id
典型输出:
"data":
"students": [
"id": "1",
"name": "John",
"age": "18",
"schoolClass": null
]
有什么方法可以获取实际数据而不是空值?
【问题讨论】:
学生表有class_id/classId吗? @VivekDoshi 是的,它有 SchoolClassId 字段并填写了适当的 ID(我将 Class 重命名为 SchoolClass,以免将此实体与 JS Class 混淆) 看看这个:github.com/mickhansen/graphql-sequelize,觉得这对你有帮助 【参考方案1】:默认情况下,调用findAll
时,Sequelize 不会填充任何由关系创建的字段。您必须使用include
选项来指定要包含查询的关系。请参阅the docs 了解更多信息。
此外,findAll
只接受一个参数(一个选项对象),我不太确定您通过将上下文传递给模型来尝试做什么。这应该足以让所有学生获得相关的 schoolClass:
return models.Student.findAll( include: [ 'SchoolClass' ] )
Check out the reference for findAll
了解有关您可以使用哪些选项的更多信息。
【讨论】:
问题出在我在这里粘贴的代码之外,它在 graphql 解析器中。return
缺少函数 Student: class(student) student.getClass(); 以上是关于node.js graphql/sequelize 服务器为链接属性返回 null的主要内容,如果未能解决你的问题,请参考以下文章
用 graphql-sequelize 解决“IS A”关系