我已经在GraphQL服务器上工作了一段时间,虽然我了解大部分方面,但我似乎无法掌握缓存。当谈到缓存时,我看到DataLoader和Redis都被提及,但我不清楚何时应该使用什么以及如何使用它们。我认为DataLoader更多的是在字段级别使用来应对n+1问题?我猜Redis是不是处于更高的水平?如果有人能阐明这一点,我将不胜感激。谢谢。 最佳答案 DataLoader主要是一种对某些数据源进行批处理请求的方法。但是,它可以根据每个请求选择性地使用缓存。这意味着,在执行相同的GraphQL查询时,您只会获取特定实体一次。例如,我们可
我想使用Jest为GraphQL解析器编写测试,但真的不知道从哪里开始。解析器是使用NodeJS上的Mongoose写入MongoDB数据库的简单CRUD函数。类型:typeArticle{_id:ID!title:Stringauthors:[User]}查询extendtypeQuery{articles:[Article]article(_id:ID!):Article}解析器(只读)Query:{articles:()=>newPromise((resolve,reject)=>{Article.find({},(err,articles)=>{if(err)reject(er
Graphql返回带有空ID的对象。与mongodb。我觉得很奇怪。如果我删除MailTypeid上的newGraphQLNonNull(),它适用于id:null,其他字段工作正常。constMailType=newGraphQLObjectType({name:'Mail',fields:()=>({id:{type:newGraphQLNonNull(GraphQLID),},...})constQuery={mails:{type:newGraphQLList(MailType),args:{senderId:{type:GraphQLID},isOffline:{type:G
我正在使用Graphql,然后我遇到了需要填充的情况,但我不知道如何执行它。这是我的预订模式constmongoose=require('mongoose')constSchema=mongoose.Schemaconstbookingschema=newSchema({event:{type:Schema.Types.ObjectId,ref:'Event'},user:{type:Schema.Types.ObjectId,ref:'User'}},{timestamps:true})module.exports=mongoose.model('Booking',bookingsc
我正在编写用于在NodeJS中登录用户的突变。它给出错误“必须提供名称”。这是浏览器GraphQL查询:mutation{login(username:"dfgdfg",password:"test1234"){_id,name{fname,lname,mname}}}这是我的代码constlogin={type:UserType,args:{input:{name:'Input',type:newGraphQLNonNull(newGraphQLObjectType({username:{name:'Username',type:newGraphQLNonNull(GraphQLSt
我通读了apollo-server-tutorial,我试图只用mongodb复制它——没有sqllite。我来自meteor,所以我正在学习async和mongoose。我对addAuthor()的修改工作正常(我在数据库中看到一条新记录)但graphiql返回null。我如何让它返回预期的字段?mutation{addAuthor(firstName:"falieson",lastName:"p"){_idfirstNamelastName}}{"data":{"addAuthor":null}}架构:https://github.com/Falieson/apollo-serve
我的问题是什么是最佳实践?我正在创建一个后端,它使用GraphQL作为API,并将MongoDB作为数据存储。我知道graphql验证查询,特别是接收到的枚举。我的问题是依赖GraphQL输入枚举验证是否足够或者我是否还应该在数据库级别添加验证。我问这个是因为这似乎是一种不好的做法,而且是不必要的代码重复。您将在两个地方定义可能的枚举类型,一个在GraphQL模式中,一个在MongoDB模型中。例如:gql架构:enumEyeColor{BROWNBLUEGREEN}Mongoose模型:newmongoose.Schema({eyeColor:{type:String,enum:["
typeCategory{id:ID!@idname:String!}typeSubCategoryLevel1{id:ID!@idname:String!parentCategory:Category!@relation(link:INLINE)}typeSubCategoryLevel2{id:ID!@idname:String!parentCategory:SubCategoryLevel1!@relation(link:INLINE)}如果我的Category级别未确定怎么办,我正在使用PrismaORM和MongoDB。 最佳答案
正在关注thistutorial,我有一个Mongoose模型:(我使用术语“帐户”而不是“待办事项”,但它是同一回事)constAccount=mongoose.model('Account',newmongoose.Schema({id:mongoose.Schema.Types.ObjectId,name:String}));和一个GraphQLObjectType:constAccountType=newGraphQLObjectType({name:'account',fields:function(){return{id:{type:GraphQLID},name:{typ
我正在学习graphql。我可以使用查询从我的mongo数据库中检索数据,我可以使用突变创建数据。但是我如何修改现有数据呢?我有点迷路了...我必须创建一个新的突变吗? 最佳答案 是的,每个突变都描述了可以对一些数据执行的特定操作。GraphQL不像REST-它没有指定任何标准的CRUD类型操作。当你写一个突变来更新一些数据时,你有两个选择。让我们在具有completed状态和text字段的待办事项的上下文中解释它们:编写表示语义操作的突变-markTodoCompleted、updateTodoText等编写一个通用突变,仅设置传