Nic*_*tom 6 javascript node.js graphql apollo-server
我正在为GraphQL运行Apollo lambda服务器.我想拦截来自POST请求体的GraphQL查询/变异并解析它,以便我可以找出请求要求的查询/变异.环境是Node.js.
请求不是JSON,它是GraphQL查询语言.我环顾四周试图找到一种方法将其解析成一个我可以导航的对象,但我正在画一个空白.
Apollo服务器必须以某种方式解析它以指导请求.有没有人知道这样做的库或指向我如何解析请求的指针?请求正文的示例以及我想在下面检索的内容.
{"query":"{\n qQueryEndpoint {\n id\n }\n}","variables":null,"operationName":null}
Run Code Online (Sandbox Code Playgroud)
我想确定这是一个查询,并且qQueryEndpoint正在被要求.
{"query":"mutation {\\n saveSomething {\\n id\\n }\\n}","variables":null}
Run Code Online (Sandbox Code Playgroud)
我想确定这是一个突变,saveSomething正在使用突变.
我的第一个想法是删除换行符并尝试使用正则表达式来解析请求,但这感觉就像一个非常脆弱的解决方案.
Gab*_*leu 13
你可以使用graphql-tag:
const gql = require('graphql-tag');
const query = `
{
qQueryEndpoint {
id
}
}
`;
const obj = gql`
${query}
`;
console.log('operation', obj.definitions[0].operation);
console.log('name', obj.definitions[0].selectionSet.selections[0].name.value);
Run Code Online (Sandbox Code Playgroud)
打印出来:
operation query
name qQueryEndpoint
Run Code Online (Sandbox Code Playgroud)
随着你的突变:
operation mutation
name saveSomething
Run Code Online (Sandbox Code Playgroud)
Chr*_*ich 13
graphql-tag建立在核心graphql库上(并因此安装它) - 如果您只想获取操作的类型和它的名称,您可以通过graphql直接使用并分析解析的 GraphQL 操作的完整 AST 来实现:
const { parse } = require('graphql');
const query = `
{
qQueryEndpoint {
id
}
}
`;
const mutation = `
mutation {
saveSomething {
id
}
}
`;
const firstOperationDefinition = (ast) => ast.definitions[0];
const firstFieldValueNameFromOperation = (operationDefinition) => operationDefinition.selectionSet.selections[0].name.value;
const parsedQuery = parse(query);
const parsedMutation = parse(mutation);
console.log('operation', firstOperationDefinition(parsedQuery).operation);
console.log('firstFieldName', firstFieldValueNameFromOperation(firstOperationDefinition(parsedQuery)));
console.log('operation', firstOperationDefinition(parsedMutation).operation);
console.log('firstFieldName', firstFieldValueNameFromOperation(firstOperationDefinition(parsedMutation)));
Run Code Online (Sandbox Code Playgroud)
这样你就不需要依赖graphql-tag并且你可以使用真正的GraphQL AST(因此很容易适应进一步的需求)——因为graphql-tag不提供完整的 AST。
请参阅 AST 以了解AST Explorer 中的查询。
| 归档时间: |
|
| 查看次数: |
4442 次 |
| 最近记录: |