GraphQL.js如何把schema定义单独成一个文件模块?
发布于 作者:苏南大叔 来源:程序如此灵动~ 我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...
苏南大叔接着分析graphql
的nodejs
的代码,本文来实现一个伪需求,就是graphql
定义schema
的时候,如果schema
定义比较大的话(应该行数都不会少),如何把这个schema
数据结构单独成一个文件,这样的目录结构更清晰一些。
大家好,这里是苏南大叔的“程序如此灵动”博客,这里记录苏南大叔和计算机代码的故事。本文介绍在nodejs
代码,schema
文件定义单独成文件的方法。本文测试环境:win10
,node@16.14.0
,graphql@16.3.0
,graphql-import-node@0.0.4
。
本文中记载的方法,并不是个太好的方法,仅仅是个伪需求。因为schema
后续都是用.js
代码描述的。所以,这种情况的应用场景也不是很多。
安装graphql-import-node
模块
graphql-import-node
官方地址:
安装姿势:
npm i graphql-import-node --save
使用基本姿势:
var { buildASTSchema } = require('graphql');
require('graphql-import-node/register');
var schema2 = require('./2.graphql');
var schema = buildASTSchema(schema2);
注意:这里使用的是buildASTSchema()
,而不是buildSchema()
。
改造版的graphql
范例
前一篇范例文章,把其中的schema
定义部分,单独拿出来成文。见这里:
type Query {
hello: String
}
上面这种结构定义方式,官方叫做
SDL
,全称是Schema Definition Language
。说明见这里:
改造代码如下:
var { graphql, buildASTSchema, versionInfo, } = require('graphql');
require('graphql-import-node/register');
var schema2 = require('./2.graphql');
var schema = buildASTSchema(schema2);
var root = { hello: () => 'Hello world!' };
console.log(versionInfo)
if (versionInfo.major == 15) {
graphql(schema, '{ hello }', root).then((response) => {
console.log(response);
});
}
else if (versionInfo.major == 16) {
graphql({
schema: schema,
source: '{ hello }',
rootValue: root
}).then((response) => {
console.log(response);
});
}
值得注意的是:原来的buildSchema
也变成了buildASTSchema
。
另外一种使用方式
官方文档里面,还有提到:
如果不想在代码里面写graphql-import-node/register
的话,也可以在node
的-r
参数里面指定。
很奇怪的用法。
node -r graphql-import-node/register index.js
参考文献
- https://newsn.net/tag/graphql.html
- https://graphql.org/
- https://graphql.org/learn/
- https://graphql.org/code/
总结
本文中的伪需求完成,schema
部分单独成文了,代码清晰了好多。更多graphql
的文章,请点击苏南大叔的博客:
如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。