从解析器内部获取完整的查询字符串

艺术马尔维瑙

我是 nodejs 和 apollo 服务器的新手,所以不要评判我。

问题听起来与标题完全相同:“如何在解析器函数中获取 graphql 字符串?”。

实际上,每个解析器中有四个 args:parent、args、context、info。这里的一些信息:https : //www.apollographql.com/docs/apollo-server/essentials/data#type-signature

我决定编写函数,在上下文中收集嵌套对象以重新生成查询字符串。为什么我需要它?好问题。我正在编写微服务,所以当我将嵌套查询嵌套到当前微服务之外的字段时,我通过 http 传递查询。

我的解析器:

eventByID: async (root, args, context) => {
const event = await EventModel.findById(root.id);
event.creator = await nestedContextProvider(context, 'creator', event.creator);
return eventFascade(event); //just fascade for object - nothing serious

},

它引用了nestedContextProvider 来解决嵌套上下文:

const nestedQueryTraverser = (nestedQueryArray) => {
const nestedQueryTraversed = nestedQueryArray.selectionSet.selections.map(element => (
element.selectionSet === undefined
  ? element.name.value
  : `${element.name.value}{${nestedQueryTraverser(element)}}`));
return nestedQueryTraversed;
};

const nestedContextProvider = async (context, checkField, ID) => {
if (context.operation.selectionSet.selections[0].selectionSet.selections
.find(selector => selector.name.value === checkField)) {
let nestedFieldsArr = context.operation.selectionSet.selections[0]
  .selectionSet.selections.find(selector => selector.name.value === checkField);
nestedFieldsArr = nestedQueryTraverser(nestedFieldsArr);
const a = (await users(ID, nestedFieldsArr));
return a.data.usersByIDs[0];
}
return ID;
};

所以它对我有用,但我知道必须有更好的解决方案。

有任何想法吗?

丹尼尔·雷登

graphql包包含一个print接受任何 AST 并返回字符串表示函数,因此您可以执行以下操作:

const { print } = require('graphql')

function anyResolver (parent, args, context, info) {
  const operationString = print(info.operation)
  // Fragments are not included in the operation, but we still need to print
  // them otherwise our document will reference non-existing fragments
  const fragmentsString = Object.keys(info.fragments)
    .map(fragmentName => print(info.fragments[fragmentName]))
    .join('\n\n')
  const documentString = `${operationString}\n\n${fragmentsString}`
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

获取在解析器内部引发解析错误的输入字符串

来自分类Dev

Swift的字符串解析器?

来自分类Dev

自定义查询字符串解析器返回不正确的结果

来自分类Dev

CSS解析器解析字符串内容

来自分类Dev

使用PHP解析器解析PHP字符串

来自分类Dev

如何从Boost Spirit X3 lexeme解析器中获取字符串?

来自分类Dev

树而不是字符串的解析器组合器

来自分类Dev

另一个解析器中的C字符串解析器

来自分类Dev

为JSON字符串编写解析器

来自分类Dev

了解Boost.spirit的字符串解析器

来自分类Dev

Java API中的条件字符串解析器?

来自分类Dev

使用Scala的解析器repsep拆分字符串

来自分类Dev

不带文字的JSON字符串解析器

来自分类Dev

dateutil解析器,用于月/年字符串

来自分类Dev

lproj字符串文件的解析器

来自分类Dev

为JSON字符串编写解析器

来自分类Dev

解析器字符串C#函数

来自分类Dev

不带文字的JSON字符串解析器

来自分类Dev

Nom解析器取消转义字符串

来自分类Dev

Scala 解析器失败:预期字符串文字

来自分类Dev

使用解析器组合器解析带有转义字符的字符串?

来自分类Dev

如何在C中创建AT命令解析器以从USART1获取传入的字符串?

来自分类Dev

Scala解析器组合器将字符列表转换为字符串

来自分类Dev

如何在Python中使用CSV解析器解析字符串?

来自分类Dev

使用Scala Packrat解析器解析简单的字符串

来自分类Dev

Json解析器,错误地将字符串解析为数字

来自分类Dev

使用scala packrat解析器解析一个简单的字符串

来自分类Dev

PHP简单的HTML DOM解析器查找具有任何字符的字符串

来自分类Dev

拆分字符串但保留内部字符串完整?

Related 相关文章

热门标签

归档