我想知道为什么我的论点似乎在我的GraphQL解析器内切换。我用的是快速图形。
一个解析器的示例:
getLocalDrivers: async (parent, args, ctx) => {
console.log(ctx);
}
我已经写了文件中出现的参数名称:http://graphql.org/learn/execution/
但当我调试和检查对象时,args对象似乎是第一个,上下文是第二个,父/根是第三个。
家长:
Object {location: "020202"}
args:
IncomingMessage {_readableState: ReadableState, readable: false, domain: null, …}
上下文:
Object {fieldName: "getLocalDrivers", fieldNodes: ....
某些服务器代码:
app.use(
"/graphql",
graphqlHTTP({
schema,
graphiql: true,
rootValue: rootResolver
})
);
我的根解析器:
var rootResolver = {
getLocalDrivers: async (obj, args, ctx) => {
console.log(ctx);
}
}
模式:
var { buildSchema } = require("graphql");
var schema = buildSchema(`
type Query {
getLocalDrivers(location: String): [Driver]
}
type Driver {
name: String
location: String
}`);
如果为一个字段定义了一个解析函数,当GraphQL解析该字段时,它将向该函数传递四个参数:
obj
或root
)如果特定字段缺少解析函数,GraphQL将使用默认的解析程序,该解析程序只搜索父字段上的属性,如果找到该属性,则使用该属性。
因此,您的getLocalDrivers
查询可以返回Driver
对象的数组,只要Driver
对象具有name
属性,那么name
字段将解析为该属性的值。
巧合的是,Driver
对象上的name
属性也可以是一个函数。在这种情况下,GraphQL将调用该函数以获取其返回值。与解析器非常相似,GraphQL将一些信息作为参数传递给这个函数,即1)参数,2)上下文和3)信息对象。以这种方式解析字段时,“obj”参数将被忽略。
好的,那么根呢?
根对象只是作为“父字段值”的对象,它被赋予查询和突变,这些字段与其他所有字段一样。
因此,如果您还没有为getLocalDrivers
定义解析函数(例如,因为您使用BuildQuery
编译了您的模式),GraphQL将使用默认的解析程序,并使用您传入的根对象作为父字段值。它看到一个getLocalDrivers
,但是如上所述,因为这是一个函数,所以它用上述三个参数调用该函数。
那么这里的教训是什么?
不要使用root。
认真地将模式定义为对象,或者如果要使用GraphQL模式语言编写模式,请使用GraphQL工具--makeExecutableSchema
使处理解析程序更加容易。
const typeDefs = `
type Query {
getLocalDrivers(location: String): [Driver]
}
type Driver {
name: String
location: String
}
`
const resolvers = {
Query: {
getLocalDrivers: (obj, args, ctx) => {
console.log({obj, args, ctx})
}
}
}
const schema = makeExecutableSchema({
typeDefs,
resolvers,
})
基本上,我在Spring Boot中向控制器发送两个参数,一个是字符串,另一个是文件。在操作中,当我首先接收文件,然后接收字符串时,如下所示 一切都很好,我能够正确地访问字符串和文件。 但是当我改变参数的顺序时,就像这样 我研究了很多,但不能理解这种行为。
匹配可以用来解析简单的参数: use std::env; fn increase(number: i32) { println!("{}", number + 1); } fn decrease(number: i32) { println!("{}", number - 1); } fn help() { println!("usage: match_args <stri
我已经看到了几个来源描述(根,args,上下文,信息)参数的解析器,但我仍然在寻找真正的留档的解析器。有一些博客文章提到了解析器的论点: prisma博客-2017年2月-GraphQL模式,TypeDefs 我知道,已经通过在上构建了,并且似乎在<--plhd中记录了这些参数根字段 此外,在的文档在这里最适用吗? 这些参数似乎不是GraphQL规范的一部分。 在哪里是真正的留档参数到解析器?如果
我正在这个名为Wertik JShttps://github.com/ilyaskarim/wertik-js库上工作,以使GraphQL Rest API更容易,在解析器中,当我控制台日志时,它显示未定义。对于每个模块,我都创建了动态解析器,让使用这个库的开发人员更容易。 行:https://github.com/ilyaskarim/wertik-js/blob/ec813f49a14ddd6
问题内容: 和!和有什么不一样? 问题答案: 和是存储在web.xml文件中的静态参数。如果您有不经常更改的数据,则可以将其存储在其中之一中。 如果要存储限于 特定servlet范围的 特定数据,则可以使用。内部声明的任何内容仅对该 特定servlet 才可访问 。init-param 在标记内声明。 您可以按以下方式在servlet中访问这些参数: 如果要存储 整个应用程序 通用的数据,并且该数
问题内容: 显然,请求参数的顺序未保留在Tomcat Servlet容器中(对于Google,似乎其他容器也存在相同的问题)。 这似乎是非常错误的。 如何从HttpServletRequest恢复请求参数的实际顺序? *对于那些认为请求参数顺序无关紧要的人来说, *编辑 BTW之间是有区别的: 和 因此,顺序对于重复的请求参数确实很重要(幸运的是Java确实处理了此权利)。 问题答案: 通常,您不