рдЕрдкрдиреЗ рдЧреНрд░рд╛рдлрд┐рдВрдХ рдПрдкреАрдЖрдИ рдХреЛ рдХрдордЬреЛрд░рд┐рдпреЛрдВ рд╕реЗ рдмрдЪрд╛рдПрдВ

рдирдорд╕реНрдХрд╛рд░, рд╣реЗрдмреНрд░! рдореИрдВ рдЖрдкрдХреЗ рд▓рд┐рдП рд▓реЗрдЦ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реВрдВ рд╕реБрд░рдХреНрд╖рд╛ рдХрдордЬреЛрд░рд┐рдпреЛрдВ рд╕реЗ рдЕрдкрдиреЗ рдЧреНрд░рд╛рдлрдХреЙрд▓ рдПрдкреАрдЖрдИ рдХреА рд░рдХреНрд╖рд╛ рдХрд░рдирд╛ ред


рдЧреНрд░рд╛рдлрдХрд▓рд╛рдЗрди рддреЗрдЬреА рд╕реЗ рдЙрди рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреА рдкрд╕рдВрдж рдмрдирддрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдЬрд┐рдиреНрд╣реЗрдВ рдЕрдкрдиреЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдПрдкреАрдЖрдИ рдмрдирд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рд▓реЗрдХрд┐рди, рд╕рднреА рдирдИ рддрдХрдиреАрдХреЛрдВ рдХреА рддрд░рд╣, рдЧреНрд░рд╛рдлрдХреЙрд▓ рдХреБрдЫ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рд╕реБрд░рдХреНрд╖рд╛ рдЬреЛрдЦрд┐рдореЛрдВ рдХреЗ рдЕрдзреАрди рд╣реИред рднрд▓реЗ рд╣реА рдЖрдк рдПрдХ рддреГрддреАрдп-рдкрдХреНрд╖ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдпрд╛ рдмрдбрд╝реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдЙрджреНрдпрдо рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд░рд╣реЗ рд╣реЛрдВ, рдЖрдкрдХреЛ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЗрди рдЦрддрд░реЛрдВ рд╕реЗ рдЕрдкрдиреА рд░рдХреНрд╖рд╛ рдХрд░реЗрдВред


рдЫрд╡рд┐


рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рдЦрддрд░реЗ рдЧреНрд░рд╛рдлрдХреНрдпреВрдПрд▓ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдкрдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЦрддрд░реЛрдВ рдХрд╛ рдПрдХ рдирдпрд╛ рд╕реЗрдЯ рдкреЗрд╢ рдХрд░реЗрдЧрд╛ рдЬрд┐рд╕реЗ рд╕рдВрдмреЛрдзрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдпрд╣ рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдЖрдк рдЙрди рдЦрддрд░реЛрдВ рдХреЛ рд╕рдордЭрддреЗ рд╣реИрдВ рдЬрд┐рдирд╕реЗ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рдЪрд▓рдиреЗ рд╡рд╛рд▓реЗ рдХрд┐рд╕реА рднреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред


рдЦрддрд░рд╛: рдмрдбрд╝реА, рдЧрд╣рд░реА рдиреЗрд╕реНрдЯреЗрдб рдХреНрд╡реЗрд░реА рдЬреЛ рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдорд╣рдВрдЧреА рд╣реИрдВ


рд╕рдорд╛рдзрд╛рди : рдШреЛрдВрд╕рд▓реЗ рдХреА рдЧрд╣рд░рд╛рдИ рд╕реАрдорд╛


GraphQL рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рд╢рдХреНрддрд┐ рдХреБрдЫ рдирдП рд╕реБрд░рдХреНрд╖рд╛ рдЦрддрд░реЛрдВ рд╕реЗ рдЬреБрдбрд╝реА рд╣реИред рд╕рдмрд╕реЗ рдЖрдо рдЧрд╣рд░реА рдиреЗрд╕реНрдЯреЗрдб рдХреНрд╡реЗрд░реА рд╣реИрдВ, рдЬреЛ рдорд╣рдВрдЧреА рд╕рдВрдЧрдгрдирд╛ рдФрд░ рд╡рд┐рд╢рд╛рд▓ JSON рдХреА рдУрд░ рд▓реЗ рдЬрд╛рддреА рд╣реИрдВ, рдЬреЛ рдиреЗрдЯрд╡рд░реНрдХ рдФрд░ рдЗрд╕рдХреА рдмреИрдВрдбрд╡рд┐рдбреНрде рдХреЛ рдкреНрд░рддрд┐рдХреВрд▓ рд░реВрдк рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░ рд╕рдХрддреА рд╣реИрдВред


рдЗрд╕ рддрд░рд╣ рдХреЗ рд╣рдорд▓реЗ рд╕реЗ рдЕрдкрдиреЗ рдПрдкреАрдЖрдИ рдХреА рд░рдХреНрд╖рд╛ рдХрд░рдиреЗ рдХрд╛ рд╕рд╣реА рддрд░реАрдХрд╛ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рдЧрд╣рд░рд╛рдИ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рдирд╛ рд╣реИ рддрд╛рдХрд┐ рдкрд░рд┐рдгрд╛рдо рдХреА рдЧрдгрдирд╛ рд╣реЛрдиреЗ рддрдХ рджреБрд░реНрднрд╛рд╡рдирд╛рдкреВрд░реНрдг рдЧрд╣рд░реЗ рдЕрдиреБрд░реЛрдз рдЕрд╡рд░реБрджреНрдз рд╣реЛ рдЬрд╛рдПрдВред


GraphQL рдЧрд╣рд░рд╛рдИ рд╕реАрдорд╛ рдХреНрд╡реЗрд░реА рдХреА рдЧрд╣рд░рд╛рдИ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред


import depthLimit from 'graphql-depth-limit' import express from 'express' import graphqlHTTP from 'express-graphql' import schema from './schema' const app = express() app.use('/graphql', graphqlHTTP((req, res) => ({ schema, validationRules: [ depthLimit(10) ] }))) 

рдзрдордХреА: рдЬрд╛рдирд╡рд░ рдмрд▓ рдХрдордЬреЛрд░ рдЙрддреНрдкрд░рд┐рд╡рд░реНрддрди рдЕрдиреБрд░реЛрдз


рд╕рдорд╛рдзрд╛рди : рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рд╕реАрдорд┐рдд рдХрд░реЗрдВ


рд╣реИрдХрд┐рдВрдЧ рдХреЗ рдЗрддрд┐рд╣рд╛рд╕ рдореЗрдВ рд▓реЙрдЧрд┐рдВрдЧ рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рд╕рд░реНрдЪ рдХрд░рдирд╛ рд╕рдмрд╕реЗ рдкреБрд░рд╛рдирд╛ рдЯреНрд░рд┐рдХ рд╣реИред рдкрд┐рдЫрд▓реЗ рдПрдХ рджрд╢рдХ рдореЗрдВ, рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдЗрддрдиреЗ рдбреЗрдЯрд╛ рд▓реАрдХ рд╣реБрдП рдХрд┐ рд╣рд╛рд▓ рд╣реА рдореЗрдВ 772,904,991 рдпреВрдирд┐рдХ рдИрдореЗрд▓ рдФрд░ 21,222,975 рдпреВрдирд┐рдХ рдкрд╛рд╕рд╡рд░реНрдб рдХрд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рдорд┐рд▓рд╛ред рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреНрдпрд╛ рдЖрдкрдХреЗ рдореЗрд▓ рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд▓реАрдХ рд╣реБрдИ рдереА, рдЯреНрд░реЙрдп рд╣рдВрдЯ рдиреЗ рдПрдХ рд╣реИрд╡реНрдб рдкреАрдбрдмреНрд▓реВ рд╡реЗрдмрд╕рд╛рдЗрдЯ рдмрдирд╛рдИ рдереА, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП, рджреВрд╕рд░реЛрдВ рдХреЗ рдмреАрдЪ, рдЙрдиреНрд╣реЛрдВрдиреЗ рдЗрд╕ рдбреЗрдЯрд╛рдмреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдерд╛ред


рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдЖрдкрдХреЗ рдкрд╛рд╕ рд╣рдорд▓рд╛рд╡рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЦреЛрдЬ рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрдард┐рди рдФрд░ рдорд╣рдВрдЧрд╛ рдмрдирд╛рдиреЗ рдХрд╛ рдПрдХ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╣реИ, рдЬреЛ рдЖрдкрдХреЛ рдЙрдирдХреЗ рд▓рд┐рдП рдХрдо рдЖрдХрд░реНрд╖рдХ рд▓рдХреНрд╖реНрдп рдмрдирд╛ рджреЗрдЧрд╛ред


рдЧреНрд░рд╛рдлрдХреНрд▓рд╛рдЗрди рджрд░ рд╕реАрдорд╛ рдкреНрд▓рдЧрдЗрди рдЖрдкрдХреЛ рддреАрди рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рд╕реЗ рдЕрдкрдиреЗ рдкреНрд░рд╢реНрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдмрдВрдз рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ: рдХрд╕реНрдЯрдо рдЧреНрд░рд╛рдлрдХреН-рд╢реАрд▓реНрдб рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдпрд╛ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рд╢реНрдиреЛрдВ рдХреА рдЖрдзрд╛рд░ рд╕рдВрдЦреНрдпрд╛ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рдирд╛ред


рдпрд╣ рдкреНрд▓рдЧрдЗрди рдЖрдкрдХреЛ рдПрдХ рд╕рдордп рд╡рд┐рдВрдбреЛ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкрд░ рдПрдХ рд╕реАрдорд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред рдмрд╣реБрдд рдХрдордЬреЛрд░ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдбрд╝реА рд╕рдордп рдЦрд┐рдбрд╝рдХреА рд╕реЗрдЯ рдХрд░рдирд╛, рдЬреИрд╕реЗ рдХрд┐ рд▓реЙрдЧ рдЗрди рдХрд░рдирд╛ рдФрд░ рдХрдо рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП рдЫреЛрдЯреА рд╕рдордп рдЦрд┐рдбрд╝рдХрд┐рдпрд╛рдВ рдЖрдкрдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕реБрдЦрдж рдЕрдиреБрднрд╡ рдмрдирд╛рдП рд░рдЦрдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧреА рдФрд░ рд╣рдорд▓рд╛рд╡рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдмреБрд░рд╛ рд╕рдкрдирд╛ рдмрди рдЬрд╛рдПрдЧреАред


рдЕрдиреБрд░реЛрдзреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рд╕реАрдорд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рд░реНрджреЗрд╢ рдмрдирд╛рдПрдВ:


рдпрд╣рд╛рдВ рдЖрдкрдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдЖрдк рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЖрдИрдкреА рдкрддреЗ рдпрд╛ рдЕрдиреНрдп рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдЕрджреНрд╡рд┐рддреАрдп рд╣реИ рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред


 const rateLimitDirective = createRateLimitDirective({ identifyContext: (context) => { return context.id }, }) 

рдЕрдкрдиреЗ рд╕реНрдХреАрдорд╛ рдореЗрдВ рдПрдХ рдирд┐рд░реНрджреЗрд╢ рдЬреЛрдбрд╝реЗрдВ:


 import { createRateLimitDirective } from 'graphql-rate-limit' export const schema = { typeDefs, resolvers, schemaDirectives: { rateLimit: rateLimitDirective, }, } export default schema 

рдЕрдВрдд рдореЗрдВ, рдЕрдкрдиреА рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдХреНрд╡реЗрд░реА рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рд░реНрджреЗрд╢ рдЬреЛрдбрд╝реЗрдВ:


 #        60  Login(input: LoginInput!): User @rateLimit( window: "60s" max: 10 message: "You are doing that too often. Please wait 60 seconds before trying again." ) 

рдЦрддрд░рд╛: рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдбреЗрдЯрд╛ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ


рд╕рдорд╛рдзрд╛рди : рдЗрд╕ рдбреЗрдЯрд╛ рдХреЛ рдЬрд╣рд╛рдВ рд╕рдВрднрд╡ рд╣реЛ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рддреНрд░ рд╕реЗ рд▓реЗрдВ


рдпрд╣ рдорд╛рди рд▓реЗрдирд╛ рдЖрд╕рд╛рди рд╣реИ рдХрд┐ рдпрджрд┐ рдЖрдк рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╕рдВрд╕рд╛рдзрди рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдпрд╣ рддрдп рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИ рдХрд┐ рд╡рд╣ рдХрд┐рд╕ рд╕рдВрд╕рд╛рдзрди рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдХрд┐рд╕реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдПрдХ рд╕рдВрд╕рд╛рдзрди рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдорд┐рд▓рддрд╛ рд╣реИ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрд╕ рддрдХ рдкрд╣реБрдВрдЪ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП?


рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдЕрдкрдбреЗрдЯрдпреВрдЬрд░ рдореНрдпреВрдЯреЗрд╢рди рдЕрдиреБрд░реЛрдз рд╣реИ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЕрдкрдиреА рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред


 mutation UpdateUser($input: {"id": "test123" , "email": "test@example.com"}) { UpdateUser(input: $input) { id firstName lastName } } 

рдпрджрд┐ рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдкрд░ рдХреЛрдИ рд╕реБрд░рдХреНрд╖рд╛ рдирд╣реАрдВ рд╣реИ, рддреЛ рдПрдХ рд╣рдорд▓рд╛рд╡рд░, рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛рдУрдВ рдХреА рдПрдХ рд╕реВрдЪреА рд╣реЛрдиреЗ рд╕реЗ, рдХрд┐рд╕реА рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдИрдореЗрд▓ рдкрддреЗ рдХреЛ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рдЕрдкрдбреЗрдЯ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдпрд╣рд╛рдБ рд╕реНрдкрд╖реНрдЯ рд╕рдорд╛рдзрд╛рди рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ рдХрд┐ рдЗрдирдкреБрдЯ рдлрд╝реАрд▓реНрдб рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдЖрдИрдбреА рдЖрдИрдбреА рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИред


рдРрд╕рд╛ рди рдХрд░реЗрдВ:


 function updateUser({ id, email }) { return User.findOneAndUpdate({ _id: id }, { email }) .catch(error => { throw error; }); } 

рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдХрдо рд╕реНрдкрд╖реНрдЯ рд▓реЗрдХрд┐рди рд╕рд╣реА рддрд░реАрдХрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЛ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЛ рд╕рдВрджрд░реНрдн рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХрд╛ рдЬрд╛рдПред


рдпрд╣ рдХрд░реЗрдВ:


 function updateUser({ email }, context) { return User.findOneAndUpdate({ _id: context.user._id }, { email }) .catch(error => { throw error; }); } 

рд╢рд╛рдпрдж рдпрд╣ рдПрдХ рдмрд▓реНрдХрд┐ рддреБрдЪреНрдЫ рдЙрджрд╛рд╣рд░рдг рд╣реИ, рд▓реЗрдХрд┐рди рдкреНрд░рддреНрдпреЗрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдРрд╕реА рдХреНрд░рд┐рдпрд╛рдПрдВ рдХрд░рдирд╛, рдЬрд┐рдирдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реАрдзреЗ рдЗрдВрдЯрд░реИрдХреНрдЯ рдХрд░рддрд╛ рд╣реИ, рдЖрдкрдХреЛ рдХрдИ рдЬреЛрдЦрд┐рдордкреВрд░реНрдг рддреНрд░реБрдЯрд┐рдпреЛрдВ рд╕реЗ рдмрдЪрд╛ рд╕рдХрддрд╛ рд╣реИред


рдПрдХ рд╕рд╛рде рдХрдИ рдорд╣рдВрдЧреЗ рдкреНрд░рд╢реНрдиреЛрдВ рдХреА рдкреВрд░реНрддрд┐


рд╕рдорд╛рдзрд╛рди : рдХреНрд╡реЗрд░реА рд▓рд╛рдЧрдд рд╕реАрдорд╛


рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рдПрдХ рдореВрд▓реНрдп рдкреНрд░рджрд╛рди рдХрд░рдХреЗ рдФрд░ рдкреНрд░рддрд┐ рдЕрдиреБрд░реЛрдз рдЕрдзрд┐рдХрддрдо рдореВрд▓реНрдп рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрдХрд░, рд╣рдо рдШреБрд╕рдкреИрдард┐рдпреЛрдВ рд╕реЗ рдЦреБрдж рдХреА рд░рдХреНрд╖рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдорд╣рдВрдЧреЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред


рд░реЗрдЦрд╛рдВрдХрди рд▓рд╛рдЧрдд рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдкреНрд▓рдЧрдЗрди рдкреНрд░рд╢реНрдиреЛрдВ рдХреА рд▓рд╛рдЧрдд рдФрд░ рдЕрдзрд┐рдХрддрдо рд▓рд╛рдЧрдд рд╕реАрдорд╛ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рд╣реИред


рдЕрдзрд┐рдХрддрдо рд▓рд╛рдЧрдд рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ:


 app.use( '/graphql', graphqlExpress(req => { return { schema, rootValue: null, validationRules: [ costAnalysis({ variables: req.body.variables, maximumCost: 1000, }), ], } }) ) 

рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧрдд рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ:


 Query: { Article: { multipliers: ['limit'], useMultipliers: true, complexity: 3, }, } 

рдЦрддрд░рд╛: рдЧреНрд░рд╛рдлрдХреЙрд▓ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╡рд┐рд╡рд░рдг рдХрд╛ рдЦреБрд▓рд╛рд╕рд╛ рдХрд░рдирд╛


рд╕рдорд╛рдзрд╛рди : "рдореБрдХрд╛рдмрд▓рд╛" рдХреЛрдб рдореЗрдВ рдЖрддреНрдордирд┐рд░реАрдХреНрд╖рдг рдЕрдХреНрд╖рдо рдХрд░реЗрдВ


GraphQL рдПрдХ рдЕрддреНрдпрдВрдд рдЙрдкрдпреЛрдЧреА рд╡рд┐рдХрд╛рд╕ рдЙрдкрдХрд░рдг рд╣реИред рдпрд╣ рдЗрддрдирд╛ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рд╣реИ рдХрд┐ рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рдЖрдкрдХреА рдпреЛрдЬрдирд╛, рдЕрдиреБрд░реЛрдзреЛрдВ рдФрд░ рд╕рджрд╕реНрдпрддрд╛ рдХрд╛ рднреА рджрд╕реНрддрд╛рд╡реЗрдЬ рджреЗрддрд╛ рд╣реИред рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА рдЙрди рд╣рдорд▓рд╛рд╡рд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╕реЛрдиреЗ рдХреА рдЦрд╛рди рд╣реЛ рд╕рдХрддреА рд╣реИ рдЬреЛ рдЖрдкрдХреЗ рдЖрд╡реЗрджрди рдореЗрдВ рдХрдордЬреЛрд░рд┐рдпрд╛рдВ рдвреВрдВрдврдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред


GraphQL рдкреНрд░рджрд░реНрд╢рди рдЖрддреНрдордирд┐рд░реАрдХреНрд╖рдг рдкреНрд▓рдЧрдЗрди рдЖрдкрдХреЗ рд╕реНрдХреАрдорд╛ рдХреЛ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рд░реВрдк рд╕реЗ рд▓реАрдХ рд╣реЛрдиреЗ рд╕реЗ рд░реЛрдХреЗрдЧрд╛ред рдмрд╕ рдкреНрд▓рдЧрдЗрди рдЖрдпрд╛рдд рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рдЕрдкрдиреЗ рд╕рддреНрдпрд╛рдкрди рдирд┐рдпрдореЛрдВ рдкрд░ рд▓рд╛рдЧреВ рдХрд░реЗрдВред


 import express from 'express'; import bodyParser from 'body-parser'; import { graphqlExpress } from 'graphql-server-express'; + import NoIntrospection from 'graphql-disable-introspection'; const myGraphQLSchema = // ...    ! const PORT = 3000; var app = express(); app.use('/graphql', bodyParser.json(), graphqlExpress({ schema: myGraphQLSchema, validationRules: [NoIntrospection] })); app.listen(PORT); 

Source: https://habr.com/ru/post/hi481840/


All Articles