graphql - 如何访问解析器中的查询路径属性?GraphQL
问题描述
我有一个具有以下结构的数据库。
我正在为最底部的节点(“行”节点)编写一个 GraphQL 解析器。
如图所示,每个“行”节点对应一个特定路径。(公司)->(数据库)->(表)->(行)
查询将采用以下形式:
{
Company(name: "Google") {
Database(name: "accounts") {
Table(name: "users") {
rows
}
}
}
}
问题:如何在解析器中包含/访问Company.name
, Database.name
,Table.name
信息rows
以便确定rows
要返回的节点?
换句话说:我知道我可以访问Table.name
using parent.name
,但是有没有办法获得parent.parent.name
or parent.parent.parent.name
?
如果无法访问祖先属性,我应该使用参数或上下文将这些属性手动传递到rows
解析器吗?
注意:我不能使用 neo4j-graphql-js 包。
注意:这是我想到的第一个简单示例,我知道以这种方式组织数据存在结构性问题,但问题仍然存在。
解决方案
您可以从传递给解析器的 GraphQLResolveInfo 对象中提取路径:
const { responsePathAsArray } = require('graphql')
function resolver (parent, args, context, info) {
responsePathAsArray(info.path)
}
这将返回一个数组,如['google', 'accounts', 0, 'user']
. 但是,您也可以将任意数据从父解析器传递到子解析器。
function accountResolver (parent, args, context, info) {
// Assuming we already have some value at parent.account and want to return that
return {
...parent.account,
message: 'It\'s a secret!',
}
}
function userResolver (parent, args, context, info) {
console.log(parent.message) // prints "It's a secret!"
}
除非message
与某些字段名称匹配,否则它实际上不会出现在您的响应中。
推荐阅读
- windows - Windows 批量删除字符串和换行符
- javascript - FileReader onLoad 未触发
- java - Android API 版本 27 仍使用 SQLite 3.8。如何更新到 SQLite 数据库 3.19?
- python - 在 python 中显示 10 个第一个素数斐波那契数
- c - sscanf 和 scanset 停止读取十六进制数字
- python - Creating a GUI for Selenium
- java - How do I solve the error: Failed to load keystore type [PKCS12 ]
- vuejs2 - Vuetify v-data-table drag and resizable columns together
- r - Results from MATLAB's crosscorr function and R's ccf different
- c# - How do I save data in related tables?