将内容类型导入 Meteor 中的 schema.graphql

Posted

技术标签:

【中文标题】将内容类型导入 Meteor 中的 schema.graphql【英文标题】:Importing content type into schema.graphql in Meteor 【发布时间】:2019-01-14 09:30:36 【问题描述】:

我很难将 .graphql 定义/内容类型导入 Meteor 中的另一个 .graphql 文件。 我尝试了诸如Meteor-GraphQl 和著名的GraphQl-Import 之类的软件包,但这些似乎都不起作用。 在我的应用程序中,我有一个 api 文件夹,其中包含我的所有定义:

-api
--Animal
---animal.graphql 
--Dog
---dog.graphql
---resolvers.js
---dog.js
---dogForm.js

在 animal.graphql 中,我有以下内容:

enum A 
  hunted
  hunter

scalar Date

interface Animal 
  _id: String!
  name: String
  group: A!
  createdAt: Date

在 dog.graphql 中,我有以下内容:

#import Animal "../Animals/Animal.graphql"

type Dog implements Animal
  _id: String!
  name: String!
  group: A!
  ayes: Int!
  createdAt: Date


type Query 
  dog: [Dog]


type Mutation 
  createDog(
    name: String!
    group: A!
    ayes: Int!
    createdAt: Date
  ): Dog

如果我在 dogForm.js 中导入并记录狗模式:

import DogSchema from "../Dog/Dog.graphql";
console.log("Dog Schema: ", DogSchema);

我发现未导入 Animal 架构,并收到错误消息:

Type "Animal" not found in document.

Here 是一个代码框示例。 那么在 .graphql 文件中导入内容类型和类型定义的最佳方式是什么?

【问题讨论】:

【参考方案1】:

我通过简单地导入 SDL 文件并在需要时将它们连接起来解决了我的问题。实际上,如果 Animal 模式已经编译(makeExecutableSchema),则可以使用 type Dog implements Animal ... 而无需导入 Animal #import Animal "../Animals/Animal.graphql"。所以我最终使用glob、path 和fs 编写了一个函数,它会自动导入我所有的.graphql 文件和解析器并使其可执行。当使用多个 SDL 时,我只需 import 他们并连接字符串。

import AnimalSchema "../Animal/animal.graphql";
import DogSchema from "../Dog/Dog.graphql";
let contatSchema = AnimalSchema + DogSchema;

【讨论】:

【参考方案2】:

这应该可行:

meteor add swydo:graphql

dog.graphql:

#import "../Animal/animal.graphql"

type Dog implements Animal 
...

【讨论】:

我已经这样做了,但我总是得到:未捕获的错误:在文档中找不到类型“动物”。 也许可以在他们的 Github 上发布一个小副本?

以上是关于将内容类型导入 Meteor 中的 schema.graphql的主要内容,如果未能解决你的问题,请参考以下文章

在 Meteor (JavaScript) 中指定内容类型

如何将meteor.js db 导入远程mongo

使用 SimpleSchema 处理 Meteor.js 中的错误

Meteor 1.3 NPM:意外的保留字导入

发布函数中的 Meteor.userId()

使用 Iron:router 将某些功能或事件的输出返回到 Meteor 中的某个新页面或模板