node.js graphql/sequelize 服务器为链接属性返回 null

标签 node.js sequelize.js graphql-js

我有一个使用sequelize和graphql来提供GraphQL端点的node.js服务器。

不知何故,与 belongsTo 链接的对象字段在 GraphQL 查询输出中始终为 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
      }
    ]
  }
}

有没有办法获取实际数据而不是空值?

最佳答案

默认情况下,Sequelize 不会填充调用 findAll 时由关系创建的任何字段。您必须使用 include 选项来指定要包含查询的关系。请参阅the docs了解更多信息。

此外,findAll 仅接受一个参数(一个选项对象),而且我不太确定您想通过将上下文传递给模型来做什么。这应该足以让所有学生及其关联的 schoolClass:

return models.Student.findAll({ include: [ 'SchoolClass' ] })

Check out the reference findAll 了解有关可以使用哪些选项的更多信息。

关于node.js graphql/sequelize 服务器为链接属性返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48353943/

相关文章:

javascript - 将 MongoDB/ExpressJS 查询存储到数组中并显示到 HTML 表中

sequelize.js - Sequelize 批量更新不同的行为

mysql - Sequelize 外键返回为 "Null"

graphql查询SQL父子关系

graphql - apollo-graphql 服务器中的分页

javascript - 如何拦截 Electron 的请求并返回自定义响应?

node.js - Sequelize连接和关系

node.js - 在 Google Cloud App Engine 上运行 GraphQL 服务器

mysql - Sequelize.query 执行前的 Nodejs res.status

具有多对多关系的类型元素的 GraphQL 解析器