рдлреБрд▓-рд╕реНрдЯреИрдХ рд░рд┐рдПрдХреНрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреИрд╕реЗ рдмрдирд╛рдПрдВ рдФрд░ рддреИрдирд╛рдд рдХрд░реЗрдВ

рдирдорд╕реНрдХрд╛рд░, рд╣реЗрдмреНрд░! рдореИрдВ рдЖрдкрдХреЗ рд▓рд┐рдП рдлреНрд░реИрдВрдХ рдЬрд╝рд┐рдХрд░реНрдЯ рджреНрд╡рд╛рд░рд╛ "рд╣рд╛рдЙ рдЯреВ рдмрд┐рд▓реНрдб рдПрдВрдб рдбрд┐рдкреНрд▓реЙрдп рдП рдлреБрд▓-рд╕реНрдЯреИрдХ рд░рд┐рдПрдХреНрдЯ-рдРрдк" рд▓реЗрдЦ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реВрдВред

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

рдлреБрд▓-рд╕реНрдЯреИрдХ рдбреЗрд╡рд▓рдкрд░ рдмрдирдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ? рдлреБрд▓-рд╕реНрдЯреИрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдПрдХ рд╕рд░реНрд╡рд░ рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╕рд╛рде рд░рд┐рдПрдХреНрдЯ рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рд╡реЗрдм рдЗрдВрдЯрд░рдлреЗрд╕ рдХрд╛ рдкреВрд░рдХ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдЖрд╡реЗрджрди рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рд▓ рдПрдХ-рдкреГрд╖реНрда рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

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

рдкреНрд░рд╛рд░рдВрдн


рдЖрдк рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рддреАрди рддрд░реАрдХреЛрдВ рд╕реЗ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

  • Www.infrastructure-compenders.com рд╕реЗ рдЕрдкрдирд╛ рдХрд╕реНрдЯрдо рдмреЙрдпрд▓рд░рдкреНрд▓реЗрдЯ рдХреЛрдб рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ,
  • рдпрд╛ рдЗрд╕ GitHub-рднрдВрдбрд╛рд░ рдХреЛ рдХреНрд▓реЛрди рдХрд░реЗрдВ,
  • рдпрд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ, рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдЗрд╕ рдкреЛрд╕реНрдЯ рдХреЛ рджреЗрдЦреЗрдВред

рдПрдХ рдмрд╛рд░ рдЬрдм рдЖрдк рдирд┐рд░реНрднрд░рддрд╛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд▓реЗрддреЗ рд╣реИрдВ ( npm install рдЪрд▓рд╛рддреЗ рд╣реИрдВ), рддреЛ рдЖрдк рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдПрдХ рдХрдорд╛рдВрдб рд╕реЗ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ: npm run build ред

рдмрд┐рд▓реНрдб рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рддреАрди рдФрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред рдкреИрдХреЗрдЬ:

  • npm run{your-project-name} рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ (рд╕рд░реНрд╡рд░ рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рдмрд┐рдирд╛ рд╣реЙрдЯ-рджреЗрд╡ рдореЛрдб), рдЖрдкрдХреЗ рд░рд┐рдПрдХреНрдЯ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░рддрд╛ рд╣реИ
  • npm run start-{your-env-name} рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рд╕рдВрдкреВрд░реНрдг рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рд╕реНрдЯреИрдХ рдкреНрд░рд╛рд░рдВрдн рдХрд░рддрд╛ рд╣реИред рдиреЛрдЯ: рдЬрд╛рд╡рд╛ 8 JDK рдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдСрдлрд╝рд▓рд╛рдЗрди рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдпрд╣рд╛рдБ рдЖрдк JDK рдХреИрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ред
  • npm run deploy-{your-env-name} рдЖрдкрдХреЗ рдЖрд╡реЗрджрди рдХреЛ AWS рдореЗрдВ рддреИрдирд╛рдд рдХрд░рддрд╛ рд╣реИред

рдиреЛрдЯред рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдХреЛ AWS рдореЗрдВ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЗрди рдЕрдзрд┐рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде IAM рддрдХрдиреАрдХреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЕрдкрдиреА .env рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд░рдЦреЗрдВ:

 AWS_ACCESS_KEY_ID = *** AWS_SECRET_ACCESS_KEY = *** 

рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ


рдмреБрдирд┐рдпрд╛рджреА рдврд╛рдВрдЪреЗ рдХреЗ рдШрдЯрдХреЛрдВ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдПрдХ рд╕реНрдкрд╖реНрдЯ рд╕рдВрд░рдЪрдирд╛ рд╣реЛрддреА рд╣реИред рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рд╢реАрд░реНрд╖-рд╕реНрддрд░реАрдп рдШрдЯрдХ рд╣реИред рдпрд╣ рдЖрдкрдХреЗ рдЖрд╡реЗрджрди рдХреЗ рд╕рдордЧреНрд░ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИред

рдЙрдкрд╕рдВрдкрд╛рджрдХ (рдмрд╛рд▓ рдШрдЯрдХ) рдЖрд╡реЗрджрди рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдкрд░рд┐рд╖реНрдХреГрдд (рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд) рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдлрд╝рдВрдХреНрд╢рди рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред

рдирд┐рдореНрди рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдШрдЯрдХ <ServiceOrientedApp /> - рдпрд╣ рд╣рдорд╛рд░реЗ рд╢реАрд░реНрд╖ рд╕реНрддрд░ рдХреЗ рдШрдЯрдХ рд╣реИред рд╣рдо рдЗрд╕реЗ рдЕрдкрдиреА рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдмрд┐рдВрджреБ рдлрд╝рд╛рдЗрд▓ ( src / index.tsx) рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рд░реНрдпрд╛рдд рдХрд░рддреЗ рд╣реИрдВред

 export default ( <ServiceOrientedApp stackName = "soa-dl" buildPath = 'build' region='eu-west-1'> <Environment name="dev" /> <Route path='/' name='My Service-Oriented React App' render={()=><DataForm />} /> <DataLayer id="datalayer"> <UserEntry /> <GetUserService /> <AddUserService /> </DataLayer> </ServiceOrientedApp> ); 

<ServiceOrientedApp /> рдПрдХ рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╣реИред рдЖрдк рдЕрдкрдиреЗ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдмрд╛рд▓ рдШрдЯрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд╕реНрдкрд╖реНрдЯ (рд╡рд┐рд╕реНрддрд╛рд░) рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ <Environment /> , <Route /> , <Service /> рдФрд░ <DataLayer /> ред

<Envrionment /> рдЖрдкрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд░рдирдЯрд╛рдЗрдо рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЗ рдкрд╛рд╕ рджреЗрд╡ рдФрд░ рдареЗрд╕ рд╕рдВрд╕реНрдХрд░рдг рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдк рдкреНрд░рддреНрдпреЗрдХ рдХреЛ рдЕрд▓рдЧ рд╕реЗ рдЪрд▓рд╛ рдФрд░ рддреИрдирд╛рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

<Route /> рдЖрдкрдХреЗ рдЖрд╡реЗрджрди рдХрд╛ рдкреГрд╖реНрда рд╣реИред рдпрд╣ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рд░рд╛рдЙрдЯрд░ рдореЗрдВ <Route /> рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдпрд╣рд╛рдБ рдХреИрд╕реЗ рдорд╛рд░реНрдЧреЛрдВ рд╕рдВрдЪрд╛рд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░ рдПрдХ рдЯреНрдпреВрдЯреЛрд░рд┐рдпрд▓ рд╣реИ ред

<Service /> рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдкрд░ рдЪрд▓рддрд╛ рд╣реИред рдЗрд╕рдореЗрдВ рдПрдХ рдпрд╛ рдХрдИ <Middleware /> - рдШрдЯрдХ рдмрдЪреНрдЪреЗ рдХреЗ рд░реВрдк рдореЗрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

<Middleware /> Express.js-Middleware рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
<DataLayer /> рдЖрдкрдХреЗ рдЖрд╡реЗрджрди рдореЗрдВ рдПрдХ NoSQL рдбреЗрдЯрд╛рдмреЗрд╕ рдЬреЛрдбрд╝рддрд╛ рд╣реИред рд╕реНрд╡реАрдХрд╛рд░реЗрдВ <рдкреНрд░рд╡реЗрд╢ /> - рдмрдЪреНрдЪреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдШрдЯрдХред <рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ /> рдЖрдкрдХреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред

рдпреЗ рд╕рднреА рдШрдЯрдХ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдореЗрдВ рдЕрдкрдирд╛ рдкреВрд░реНрдг-рд╕реНрдЯреИрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдореЗрдВ рдПрдХ рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд╕рд╛рде рдПрдХ рд░рдирдЯрд╛рдЗрдо, рдПрдХ рдкреЗрдЬ, рджреЛ рд╕реЗрд╡рд╛рдПрдВ рдФрд░ рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рд╣реИред

рдШрдЯрдХ рд╕рдВрд░рдЪрдирд╛ рдЖрдкрдХреЗ рдЖрд╡реЗрджрди рдХрд╛ рдПрдХ рд╕реНрдкрд╖реНрдЯ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИред рдЖрдкрдХрд╛ рдЖрд╡реЗрджрди рдЬрд┐рддрдирд╛ рдмрдбрд╝рд╛ рд╣реЛрдЧрд╛, рдЙрддрдирд╛ рд╣реА рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред

рдЖрдкрдиреЗ рджреЗрдЦрд╛ рд╣реЛрдЧрд╛ рдХрд┐ <Service /> <DataLayer /> ред рдЗрд╕рдХреА рдПрдХ рд╕рд░рд▓ рд╡реНрдпрд╛рдЦреНрдпрд╛ рд╣реИред рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рд╣рдорд╛рд░реА рд╕реЗрд╡рд╛рдУрдВ рдХрд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рддрдХ рдкрд╣реБрдВрдЪ рд╣реЛред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрддрдирд╛ рдЖрд╕рд╛рди рд╣реИ!

рдбреЗрдЯрд╛рдмреЗрд╕ рдбрд┐рдЬрд╛рдЗрди


<DataLayer /> рдЕрдореЗрдЬрд╝рди DynamoDB рдкреИрджрд╛ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдПрдХ рдХреБрдВрдЬреА-рдореВрд▓реНрдп рдбреЗрдЯрд╛рдмреЗрд╕ (NoSQL) рд╣реИред рдпрд╣ рдХрд┐рд╕реА рднреА рдкреИрдорд╛рдиреЗ рдкрд░ рдЙрдЪреНрдЪ рдкреНрд░рджрд░реНрд╢рди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд░рд┐рд▓реЗрд╢рдирд▓ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдпрд╣ рдЬрдЯрд┐рд▓ рдкреНрд░рд╢реНрдиреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реНрдХреАрдорд╛ рдореЗрдВ рддреАрди рдХреНрд╖реЗрддреНрд░ рд╣реЛрддреЗ рд╣реИрдВ: primaryKey , rangeKey рдФрд░ data ред рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЛ рдпрд╣ рдЬрд╛рдирдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдЖрдк рдХреЗрд╡рд▓ рдЗрд╕рдХреА рдХреБрдВрдЬреА рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдБ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╛ рддреЛ primaryKey , рдпрд╛ рддреЛ rangeKey , рдпрд╛ рджреЛрдиреЛрдВред

рдЗрд╕ рдЬреНрдЮрд╛рди рдХреЗ рд╕рд╛рде, рдЖрдЗрдП рд╣рдорд╛рд░реЗ <Entry /> рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ:

 export const USER_ENTRY_ID = "user_entry"; export default function UserEntry (props) { return <Entry id={ USER_ENTRY_ID } primaryKey="username" rangeKey="userid" data={{ age: GraphQLString, address: GraphQLString }} /> }; 

<Entry /> рд╣рдорд╛рд░реЗ рдбреЗрдЯрд╛ рдХреА рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред рд╣рдо рдЕрдкрдиреЗ рдкреНрд░рд╛рдЗрдорд░реАрдХреЗ рдФрд░ рд░реЗрдВрдЬрдХреЗ рд▓рд┐рдП рдирд╛рдореЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдЖрдк рдХреБрдЫ рдбрд╛рдпрдирдореЛрдмреА рдХреАрд╡рд░реНрдб рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХрд┐рд╕реА рднреА рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЖрдк рдпрд╣рд╛рдВ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдирд╛рдореЛрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдирд┐рд╣рд┐рддрд╛рд░реНрде рд╣реИрдВ:

  • рдЬрдм рд╣рдо рдЕрдкрдиреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдЖрдЗрдЯрдо рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдЗрди рдкреНрд░рдореБрдЦ рдирд╛рдореЛрдВ рдХреЗ рд▓рд┐рдП рдорд╛рди рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
  • рджреЛрдиреЛрдВ рдХреБрдВрдЬреА рдХрд╛ рд╕рдВрдпреЛрдЬрди рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рддрддреНрд╡ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред
  • рдПрдХ рд╣реА рдХреБрдВрдЬреА рдирд╛рдореЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдФрд░ <рдПрдВрдЯреНрд░реА /> рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рдПрдХ рдирд╛рдо рд╕рдорд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рджреЛрдиреЛрдВ рдирд╣реАрдВ)ред
  • рд╣рдо рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рддрддреНрд╡ рддрднреА рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдкреНрд░рдореБрдЦ рдирд╛рдо рдХрд╛ рдореВрд▓реНрдп рд╣реЛред

рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐:

  • рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
  • рдПрдХ рд╣реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдФрд░ рдПрдХ рд╣реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдХреЗ рд╕рд╛рде рджреВрд╕рд░рд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рдирдЬрд░рд┐рдП рд╕реЗ, рдпрд╣ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рджреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдХ рд╣реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рд░рдЦрддреЗ рд╣реИрдВ рдЬрдм рдЙрдирдХреЗ рдкрд╛рд╕ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо (рдпрд╛ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд) рд╣реЛрддреЗ рд╣реИрдВред
  • рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдПрдХ рдФрд░ <Entry /> рдкреНрд░рд╛рдЗрдорд░реАрдХреЗ = "рдпреВрдЬрд╝рд░рдиреЗрдо" рдФрд░ рд░реЗрдВрдЬрдХреЗрдИ = "рдпреВрдЬрд╝рд░рд┐рдб" рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
  • рдЬрдм рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ id рддреЛ рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЛ рдХреНрд╡реЗрд░реА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╣рдо рдЙрдореНрд░ рдпрд╛ рдкрддреЗ рдХрд╛ рдЕрдиреБрд░реЛрдз рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред

рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдЖрдЗрдЯрдо рдЬреЛрдбрд╝реЗрдВ


рд╣рдордиреЗ рдЕрдкрдиреЗ <ServiceOrientedApp /> рдореЗрдВ рджреЛ <Service /> рдШрдЯрдХреЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рд╣реИред POST рд╕реЗрд╡рд╛ рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдЬреЛрдбрд╝рддреА рд╣реИ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЗрд╕рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рд╡рд╛рд▓реА GET рд╕реЗрд╡рд╛ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИред

рдЖрдЗрдП <AddUserService /> рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ рдЗрд╕ рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП рдХреЛрдб рд╣реИ:

 import * as React from 'react'; import { callService, Middleware, mutate, Service, serviceWithDataLayer } from "infrastructure-components"; import { USER_ENTRY_ID, IUserEntry } from './user-entry'; const ADDUSER_SERVICE_ID = "adduser"; export default function AddUserService () { return <Service id={ ADDUSER_SERVICE_ID } path="/adduser" method="POST"> <Middleware callback={serviceWithDataLayer(async function (dataLayer, req, res, next) { const parsedBody: IUserEntry = JSON.parse(req.body); await mutate( dataLayer.client, dataLayer.setEntryMutation(USER_ENTRY_ID, parsedBody) ); res.status(200).set({ "Access-Control-Allow-Origin" : "*", // Required for CORS support to work }).send("ok"); })}/> </Service> }; ред import * as React from 'react'; import { callService, Middleware, mutate, Service, serviceWithDataLayer } from "infrastructure-components"; import { USER_ENTRY_ID, IUserEntry } from './user-entry'; const ADDUSER_SERVICE_ID = "adduser"; export default function AddUserService () { return <Service id={ ADDUSER_SERVICE_ID } path="/adduser" method="POST"> <Middleware callback={serviceWithDataLayer(async function (dataLayer, req, res, next) { const parsedBody: IUserEntry = JSON.parse(req.body); await mutate( dataLayer.client, dataLayer.setEntryMutation(USER_ENTRY_ID, parsedBody) ); res.status(200).set({ "Access-Control-Allow-Origin" : "*", // Required for CORS support to work }).send("ok"); })}/> </Service> }; 

<Service /> рдШрдЯрдХ - рддреАрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ:

  • рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ ( id ) рдПрдХ рдЕрджреНрд╡рд┐рддреАрдп рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЬрдм рд╣рдо рдЕрдиреНрдп рдШрдЯрдХреЛрдВ рдореЗрдВ service рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рд╣рдо рдПрдХ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ ( id ) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
  • path (рдкреНрд░рд╛рд░рдВрднрд┐рдХ / рдХреЗ рд╕рд╛рде) рдЖрдкрдХреА рд╕реЗрд╡рд╛ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ URL рдкрде рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ
  • method GET , POST , UPDATE , DELETE рдПрдХ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдЙрдиреНрд╣реЛрдВрдиреЗ HTTP рдЕрдиреБрд░реЛрдз рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣рдо рд╕реЗрд╡рд╛ рдХреЛ рдлреЛрдиред

рд╣рдо рдЬреЛрдбрд╝рдиреЗ <Middleware /> рдПрдХ рдмрдЪреНрдЪреЗ рддрддреНрд╡ рдХреЗ рд░реВрдк рдореЗрдВред рдпрд╣ <Middleware /> рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рд▓реЗрддрд╛ рд╣реИред рд╣рдо рд╕реАрдзреЗ Express.js рдорд┐рдбрд▓рд╡реЗрдпрд░ рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд╣рдо рд╕рдорд╛рд░реЛрд╣ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓рдирд╛ serviceWithDataLayer ред рдпрд╣ рд╣рдорд╛рд░реЗ рдХреЙрд▓рдмреИрдХ рдХреЗ рдкрд╣рд▓реЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ dataLayer рдЬреЛрдбрд╝рддрд╛ рд╣реИред

DataLayer рдбреЗрдЯрд╛рдмреЗрд╕ рддрдХ рдкрд╣реБрдБрдЪ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХреИрд╕реЗ!

mutate рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдлрд╝рдВрдХреНрд╢рди рд╣рдорд╛рд░реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдбреЗрдЯрд╛ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рдореНрдпреВрдЯреЗрд╢рди рдХрдорд╛рдВрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред

рддрддреНрд╡ рдбреЗрдЯрд╛ рдПрдХ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдХреБрдВрдЬреА-рдореВрд▓реНрдп рдЬреЛрдбрд╝реЗ рд╣реИрдВред рд╣рдорд╛рд░реА рд╕реЗрд╡рд╛ рдореЗрдВ, рд╣рдореЗрдВ рдЕрдиреБрд░реЛрдз рдирд┐рдХрд╛рдп рд╕реЗ рдпрд╣ рд╡рд╕реНрддреБ рдорд┐рд▓рддреА рд╣реИред User рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдирд┐рдореНрди рд╕рдВрд░рдЪрдирд╛ рд╣реИ:

 export interface IUserEntry { username: string, userid: string, age: string, address: string } 

рдпрд╣ рдСрдмреНрдЬреЗрдХреНрдЯ primaryKey рдирд╛рдо рдФрд░ rangeKey рдФрд░ рдЙрди рд╕рднреА рдбреЗрдЯрд╛ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЛ рд▓реЗрддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдордиреЗ <Entry /> рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдерд╛ред

рдиреЛрдЯ: рдЕрднреА рдХреЗ рд▓рд┐рдП, рдПрдХрдорд╛рддреНрд░ рд╕рдорд░реНрдерд┐рдд рдкреНрд░рдХрд╛рд░ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИ рдЬреЛ <Entry /> рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдореЗрдВ рдПрдХ рдЧреНрд░рд╛рдлрдХрд▓рд╛рдЗрдирд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред
рд╣рдордиреЗ рдКрдкрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рд╣рдо рд╢рд░реАрд░ рд╕реЗ IUserEntry рдбреЗрдЯрд╛ рд▓реЗрддреЗ рд╣реИрдВред рдпрд╣ рдХреИрд╕рд╛ рдЪрд▓ рд░рд╣рд╛ рд╣реИ?

рдЗрдиреНрдлреНрд░рд╛рд╕реНрдЯреНрд░рдХреНрдЪрд░ рдШрдЯрдХ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдлрд╝рдВрдХреНрд╢рди callService (serviceId, dataObject) рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдПрдХ рд╕реЗрд╡рд╛ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛, рдПрдХ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ ( POST рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдПрдХ рдЕрдиреБрд░реЛрдз рдирд┐рдХрд╛рдп рдХреЗ рд░реВрдк рдореЗрдВ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП), рдПрдХ success рд╕рдорд╛рд░реЛрд╣ рдФрд░ рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕реНрдирд┐рдкреЗрдЯ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЕрдкрдиреЗ <AddUserService /> рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рд╕реЗрд╡рд╛ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВред рдФрд░ рд╣рдо userData рдкрд╛рд╕ userData , рдЬрд┐рд╕реЗ рд╣рдо рдЕрдкрдиреЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрддреЗ рд╣реИрдВред

 export async function callAddUserService (userData: IUserEntry) { await callService( ADDUSER_SERVICE_ID, userData, (data: any) => { console.log("received data: ", data); }, (error) => { console.log("error: " , error) } ); }; рдбреЗрдЯрд╛); export async function callAddUserService (userData: IUserEntry) { await callService( ADDUSER_SERVICE_ID, userData, (data: any) => { console.log("received data: ", data); }, (error) => { console.log("error: " , error) } ); }; 

рдЕрдм callAddUserService рдлрд╝рдВрдХреНрд╢рди рд╡рд╣ рд╕рдм рд╣реИ рдЬрд┐рд╕рдХреА рд╣рдореЗрдВ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрдм рд╣рдо рдПрдХ рдирдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдмрдЯрди рдХреНрд▓рд┐рдХ рдХрд░рдиреЗ рдкрд░ рдЗрд╕реЗ рдХреЙрд▓ рдХрд░реЗрдВ:

 <button onClick={() => callAddUserService({ username: username, userid: userid, age: age, address: address })}>Save</button> 

рд╣рдо рдЗрд╕реЗ IUserEntry рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╣рддреЗ рд╣реИрдВред рдпрд╣ рд╕рд╣реА рд╕реЗрд╡рд╛ рдХрд╣рддрд╛ рд╣реИ (рдЬреИрд╕рд╛ рдХрд┐ рдЗрд╕рдХреЗ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ ( id ) рджреНрд╡рд╛рд░рд╛ рдЗрдВрдЧрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ)ред рдпрд╣ рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ рдмреЙрдбреА рдореЗрдВ userData рдбрд╛рд▓рддрд╛ рд╣реИред <AddUserService /> рдПрдХ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рд╢рд░реАрд░ рдФрд░ рдкреБрдЯ рдЙрдирдореЗрдВ рд╕реЗ рдмрд╛рд╣рд░ рдбреЗрдЯрд╛ рд▓реЗрддрд╛ рд╣реИред

рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдЖрдЗрдЯрдо рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ


рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдЖрдЗрдЯрдореЛрдВ рдХреЛ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЙрдиреНрд╣реЗрдВ рдЬреЛрдбрд╝рдирд╛ рдЬрд┐рддрдирд╛ рдЖрд╕рд╛рди рд╣реИред

 export default function GetUserService () { return <Service id={ GETUSER_SERVICE_ID } path="/getuser" method="GET"> <Middleware callback={serviceWithDataLayer(async function (dataLayer, req, res, next) { const data = await select( dataLayer.client, dataLayer.getEntryQuery(USER_ENTRY_ID, { username: req.query.username, userid: req.query.userid }) ); res.status(200).set({ "Access-Control-Allow-Origin" : "*", // Required for CORS support to work }).send(JSON.stringify(data)); })}/> </Service> } 

рдлрд┐рд░, рд╣рдо рдбреЗрдЯрд╛рдмреЗрд╕ рддрдХ рдкрд╣реБрдВрдЪ рдХреЗ рд╕рд╛рде <Service />, <Middleware /> рдФрд░ рдПрдХ рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

mutate рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдмрдЬрд╛рдп, рдЬреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдПрдХ рдЖрдЗрдЯрдо рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рд╣рдо select рдлрд╝рдВрдХреНрд╢рди select рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ select ред рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдЙрд╕ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдкреВрдЫрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо dataLayer рд╕реЗ рд▓реЗ рд░рд╣реЗ рд╣реИрдВред рджреВрд╕рд░рд╛ рдкреИрд░рд╛рдореАрдЯрд░ select рдХрдорд╛рдВрдб рд╣реИред mutation рдХрдорд╛рдВрдб рдХреА рддрд░рд╣, рд╣рдо dataLayer рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ select рдХрдорд╛рдВрдб рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдЗрд╕ рдмрд╛рд░ рд╣рдо getEntryQuery рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ ( id ) <Entry /> рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХрд╛ рддрддреНрд╡ рд╣рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдФрд░ рд╣рдо рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖ рддрддреНрд╡ рдХреА рдХреБрдВрдЬреА ( primaryKey рдФрд░ rangeKey ) рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред рдЪреВрдВрдХрд┐ рд╣рдо рджреЛрдиреЛрдВ рдЪрд╛рдмрд┐рдпрд╛рдБ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдПрдХ рддрддреНрд╡ рд╡рд╛рдкрд╕ рдорд┐рд▓рддрд╛ рд╣реИред рдЕрдЧрд░ рдпрд╣ рдореМрдЬреВрдж рд╣реИред

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдо рдЕрдиреБрд░реЛрдз рд╕реЗ рдкреНрд░рдореБрдЦ рдорд╛рди рд▓реЗрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЗрд╕ рдмрд╛рд░ рд╣рдо рдЙрдиреНрд╣реЗрдВ request.query рд╕реЗ рд▓реЗрддреЗ рд╣реИрдВ, рди рдХрд┐ request.body ред рдХрд╛рд░рдг рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рд╕реЗрд╡рд╛ GET рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИред рдпрд╣ рд╡рд┐рдзрд┐ рдЕрдиреБрд░реЛрдз рдореЗрдВ рд╢рд░реАрд░ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреА рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рд╕рднреА рдбреЗрдЯрд╛ рдХреЛ рдХреНрд╡реЗрд░реА рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред

callService рдлрд╝рдВрдХреНрд╢рди рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЗрд╕реЗ рд╕рдВрднрд╛рд▓рддрд╛ рд╣реИред рдЬреИрд╕реЗ callAddUserService-function , рд╣рдо рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ ( id ) <Service /> рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рд╣рдо рдХреЙрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╣рдо рдЖрд╡рд╢реНрдпрдХ рдбреЗрдЯрд╛ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ рд╕рд┐рд░реНрдл рдЪрд╛рдмрд┐рдпрд╛рдБ рд╣реИрдВред рдФрд░ рд╣рдо рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВред

рдПрдХ рд╕рдлрд▓ рдХреЙрд▓рдмреИрдХ рдПрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред Json рд╕реНрд╡рд░реВрдк рдореЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдирд┐рдХрд╛рдп рдореЗрдВ рд╣рдорд╛рд░рд╛ рдкрд╛рдпрд╛ рддрддреНрд╡ рд╣реЛрддрд╛ рд╣реИред рд╣рдо рдЗрд╕ рддрддреНрд╡ рдХреЛ get_user_entry рдХреБрдВрдЬреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред " Get_ " рдЙрд╕ рдЕрдиреБрд░реЛрдз рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдЕрдкрдиреЗ рдЪрдпрдирд┐рдд рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд░рдЦрд╛ рдерд╛ред " User_entry " рд╣рдорд╛рд░реЗ <Entry /> рдХреА рдХреБрдВрдЬреА рд╣реИред

 export async function callGetUserService (username: string, userid: string, onData: (userData: IUserEntry) => void) { await callService( GETUSER_SERVICE_ID, { username: username, userid: userid }, async function (response: any) { await response.json().then(function(data) { console.log(data[`get_${USER_ENTRY_ID}`]); onData(data[`get_${USER_ENTRY_ID}`]); }); }, (error) => { console.log("error: " , error) } ); } {USER_ENTRY_ID}`]); export async function callGetUserService (username: string, userid: string, onData: (userData: IUserEntry) => void) { await callService( GETUSER_SERVICE_ID, { username: username, userid: userid }, async function (response: any) { await response.json().then(function(data) { console.log(data[`get_${USER_ENTRY_ID}`]); onData(data[`get_${USER_ENTRY_ID}`]); }); }, (error) => { console.log("error: " , error) } ); } 

рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ рдЕрдкрдиреЗ рдлреБрд▓-рд╕реНрдЯреИрдХ рдРрдк рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВред


рдпрджрд┐ рдЖрдкрдиреЗ рдЕрднреА рддрдХ рдЕрдкрдирд╛ рдЖрд╡реЗрджрди рд╢реБрд░реВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рддреЛ рдЕрдм рдпрд╣ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ: npm run start-{your-env-name} ред

рдЖрдк рдПрдХ рднреА рдЖрджреЗрд╢ рдХреЗ рд╕рд╛рде рдПрдбрдмреНрд▓реНрдпреВрдПрд╕ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЗ рдЖрд╡реЗрджрди рдХреЛ рддреИрдирд╛рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ: npm run deploy-{your-env-name} ред (.Env рдлрд╝рд╛рдЗрд▓ рдореЗрдВ AWS рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕ рд░рдЦрдирд╛ рдпрд╛рдж рд░рдЦреЗрдВ)ред

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

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

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


All Articles