Articles of graphql

有没有一种方法来从protobuf生成GraphQL模式?

我有一个相当大/复杂的API的protobuf定义,我不知道是否有一个方便的工具来自动生成一个文本GraphQL模式和它的(嵌套)types从这个protobuf的子集? 我正常使用Node.js,但我打开其他语言来生成架构。 提前致谢!

Edge.node字段types必须是输出types,但是:undefined

我正在尝试使用与Relay兼容的GraphQL架构来设置node.js服务器。 当试图validation或加载架构时,我得到以下错误: EventEdge.node field type must be Output Type but got: undefined. 这是由其他types定义中的Eventtypes的连接types引起的。 我不会发布整个模式,因为它非常详细,但是当连接字段被注释掉时,模式被正确加载,并且不会引发错误。 我已经包含了一个导致相同问题的简化模式的例子: const graphql = require('graphql') const relay = require('graphql-relay') const GraphQLID = graphql.GraphQLID, GraphQLInt = graphql.GraphQLInt, GraphQLString = graphql.GraphQLString, GraphQLList = graphql.GraphQLList, GraphQLObjectType = graphql.GraphQLObjectType, GraphQLSchema = graphql.GraphQLSchema, GraphQLNonNull = graphql.GraphQLNonNull const connectionArgs = relay.connectionArgs, connectionDefinitions = relay.connectionDefinitions, connectionFromArray = relay.connectionFromArray, […]

GraphQL参数错误:参数types必须是inputtypes,但得到:function GraphQLObjectType(config){

在服务器启动( node index.js )我得到以下错误与我的GraphQL NodeJS服务器: 错误:Query.payment(data :)参数types必须是inputtypes,但得到:function GraphQLObjectType(config){_classCallCheck(this,GraphQLObjectType); 这个错误发生时,我改变了我的原始参数从string args: { data: { type: graphQL.GraphQLString } }, 对于一个对象types: args: { data: { type: graphQL.GraphQLObjectType } }, 我需要一个对象types,因为我需要发送几个字段作为参数。 GraphQL服务器: var Query = new graphQL.GraphQLObjectType({ name: 'Query', fields: { payment: { type: graphQL.GraphQLString, args: { data: { type: graphQL.GraphQLObjectType } }, resolve: function (_, args) { // […]

NodeInterface和nodeField如何在relayjs中工作,它们是什么意思

nodeInterface如何重新提取并做对象识别, 这个type代表什么, obj是什么,这里的id是什么 什么是instanceof的意思 const { nodeInterface, nodeField } = nodeDefinitions( (globalId) => { const { type, id } = fromGlobalId(globalId); console.log('NodeDefinitions (globalId), id:', id); console.log('NodeDefinitions (globalId), type:', type); if (type === 'teacher') { return teacher.findOne({ _id: id }).exec(); } else if (type === 'college') { return college.findOne({ _id: id }).exec(); } else if (type […]

你如何定义一个中继连接分页ORM?

我浏览了Relay的所有文档,似乎并没有直接解释如何使用ORM构build中继连接。 所有的例子似乎都使用了connectionFromArray方法,如果您将数据存储在内存中,但是将数据存储在数据库中,那么您将如何提供连接分页工作所需的信息呢?

在GraphQL服务器中实现访问控制的好模式是什么?

背景: 我有一套模型,其中包括用户和其他各种模型,其中一些包含对用户的引用。 我通过Graffiti生成的GraphQL API公开了这些模型,Mongo数据库使用graffiti-mongoose适配器作为后台。 我当前的REST API(我正在迁移到GraphQL)使用JSON Web令牌来validation用户,并在服务器端有一些自定义权限逻辑来处理访问控制。 问题: 我想根据当前login的用户限制对GraphQL中的对象的访问。 有些模型应该可以通过未经authentication的调用进行读取。 大多数其他模型只能由创build它们的用户访问。 通过Graffiti生成的APIpipe理对象访问控制的最佳方式是什么? 一般来说,GraphQL的访问控制是否有良好的模式? 特别是,有没有什么好的例子或图书馆与涂鸦做呢? 笔记: 据我所知, 已经实施了涂鸦 – mongoose的前后钩子,并且可以用它们进行基本的二进制validation。 我想看看更详细的访问控制逻辑如何在GraphQL API中使用。 将来,我们需要支持像pipe理员那样可以访问由特定用户组创build的模型实例的东西(例如,其用户的机构包括pipe理员)。

GraphQL – 返回计算types依赖于参数

概述 (简体): 在我的NodeJS服务器中,我已经实现了下面的GraphQL模式: type Item { name: String, value: Float } type Query { items(names: [String]!): [Item] } 客户端查询然后传递一个名称数组作为参数: { items(names: ["total","active"] ) { name value } } 后端API查询一个mysql数据库,“ 总计 ”和“ 活动 ”字段(我的数据库表上的列),并减less响应,如下所示: [{"name":"total" , value:100} , {"name":"active" , value:50}] 我想我的graphQL API支持“比例”项目,IE:我想发送以下查询: { items(names: ["ratio"] ) { name value } } 要么 { items(names: ["total","active","ratio"] […]

GraphQL查询与表连接

我正在学习GraphQL所以我build立了一个小项目。 比方说,我有2个模型, User和Comment 。 const Comment = Model.define('Comment', { content: { type: DataType.TEXT, allowNull: false, validate: { notEmpty: true, }, }, }); const User = Model.define('User', { name: { type: DataType.STRING, allowNull: false, validate: { notEmpty: true, }, }, phone: DataType.STRING, picture: DataType.STRING, }); 关系是1:很多,用户可以有很多评论。 我已经build立了这样的架构: const UserType = new GraphQLObjectType({ name: 'User', fields: () […]

Webpack html插件不会生成html

我正在使用webpack html插件从graphiql.ejs生成html页面,但是当我运行npm start时,它不会生成html页面 webpack.config.js var HtmlWebpackPlugin = require("html-webpack-plugin"); module.exports = { plugins: [ new HtmlWebpackPlugin({ filename: "public/graphql/index.html", // Write the file to <public-path>/graphql/index.html inject: false, // Do not inject any of your project assets into the template GRAPHQL_VERSION: packageJSON.dependencies.graphql.replace(/[^0-9.]/g, ""), // Get the graphql version from my package.json template: "graphiql.ejs" // path to template }) […]

如何在GraphQL中插入(Array)字段列表进行变异查询

最近我开始研究GraphQL,我能够插入平面模式的数据没有任何问题,但是当涉及到一个数组数组我得到一个错误 { "errors": [ { "message": "Must be input type" } ]} 我正在testing我的查询使用邮递员,我的变异查询是 mutation M { AddEvent ( title: "Birthday event" description:"Welcome to all" media:[{url:"www.google.com", mediaType:"image" }] location:[{address:{state:"***", city:"****"}}] ) {title,description,media,location,created,_id}} 这是我的事件架构: EventType = new GraphQLObjectType({ name: 'Event', description: 'A Event', fields: () => ({ _id: { type: GraphQLString, description: 'The id of the event.', […]