node.js - 如何使用 `apollo-server` 加载 .graphql 文件?
问题描述
我目前正在使用单独的.graphql
文件加载 GraphQL 架构,但它封装在字符串中:
schema.graphql
const schema = `
type CourseType {
_id: String!
name: String!
}
type Query {
courseType(_id: String): CourseType
courseTypes: [CourseType]!
}
`
module.exports = schema
然后将其用于apollo-server
:
index.js
const { ApolloServer, makeExecutableSchema } = require('apollo-server')
const typeDefs = require('./schema.graphql')
const resolvers = { ... }
const schema = makeExecutableSchema({
typeDefs: typeDefs,
resolvers
})
const server = new ApolloServer({
schema: schema
})
server.listen().then(({ url }) => {
console.log(`Server ready at ${url}.`)
})
有没有办法简单地加载一个看起来像这样的 .graphql?
schema.graphql
type CourseType {
_id: String!
name: String!
}
type Query {
courseType(_id: String): CourseType
courseTypes: [CourseType]!
}
然后它会在index.js
? 我注意到graphql-yoga
支持这一点,但想知道是否支持apollo-server
。我在文档中的任何地方都找不到它。我也不能fs.readFile
上班。
解决方案
如果您在.graphql
文件中定义类型定义,则可以通过以下几种方式之一读取它:
1.)自己阅读文件:
const { readFileSync } = require('fs')
// we must convert the file Buffer to a UTF-8 string
const typeDefs = readFileSync('./type-defs.graphql').toString('utf-8')
2.)利用图书馆喜欢graphql-tools
为你做这件事:
const { loadDocuments } = require('@graphql-tools/load');
const { GraphQLFileLoader } = require('@graphql-tools/graphql-file-loader');
// this can also be a glob pattern to match multiple files!
const typeDefs = await loadDocuments('./type-defs.graphql', {
file,
loaders: [
new GraphQLFileLoader()
]
})
3.) 使用babel 插件或webpack 加载器
import typeDefs from './type-defs.graphql'
推荐阅读
- javascript - 即使从另一个 HTML 页面重定向后,仍保留 HTML 中的表单值
- javascript - 盖茨比没有建造,但在开发中工作正常
- c++ - 有符号类型(PostGreSQL 值)的字节序转换
- mysql - 通过最后一个未知 id 获取一组记录
- linux - 在 Linux 中列出超过 x 分钟/小时的文件
- java - java.io.IOException:服务器返回 HTTP 响应代码:URL 为 406
- python - 函数 numpy.apply_along_axis 意外结果
- r - 删除 R 中的空列表元素
- prometheus - 复杂的 promql 查询
- c# - 通过c#表单使用php脚本插入数据库