Apollo-link-rest: рдЯреВрдЯрд╛ рд╣реБрдЖ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдЕрдкреЛрд▓реЛ рдЙрджрд╛рд╣рд░рдг

рдХреЛ рдирд┐рд░реНрдорд┐рдд 7 рдЬреВрди 2018  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: apollographql/apollo-link-rest

рдирдорд╕реНрддреЗ:

рдореИрдВ рдЕрднреА рдЖрдкрдХреЗ react-apollo codesandbox рдореЗрдВ рдореВрд▓ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд╕рд╛рде apollo-link-rest рд╕рд╛рде рд╢реБрд░реБрдЖрдд рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

рдЯреАрд╡реА рд╢реЛ рд╕реВрдЪреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдирд┐рдореНрди рддреНрд░реБрдЯрд┐ рджрд┐рдЦрд╛рддрд╛ рд╣реИ: : Network error: Failed to execute 'fetch' on 'Window': Invalid credentials mode ред

рдЙрд╕ рдХреЛрдб рдХреЛ рдореЗрд░реЗ рдЕрдкрдиреЗ create-react-app рдкрд░рд┐рд╡реЗрд╢ рдореЗрдВ рджреЛрд╣рд░рд╛рддреЗ рд╕рдордп, рдореИрдВрдиреЗ рдЕрдкреЛрд▓реЛ рджреЗрд╡рдЯреВрд▓ рдкрд░ рдЕрдиреБрд░реЛрдз рдЪрд▓рд╛рддреЗ рд╕рдордп рдирд┐рдореНрди рддреНрд░реБрдЯрд┐ рднреА рдкрдХрдбрд╝реА:

{
  "errors": [
    {
      "message": "forward is not a function",
      "locations": [
        "TypeError: forward is not a function\n    at RestLink../node_modules/apollo-link-rest/bundle.umd.js.RestLink.request (http://localhost:3000/static/js/bundle.js:21028:20)\n    at http://localhost:3000/static/js/bundle.js:19809:33\n    at ApolloLink.request (http://localhost:3000/static/js/bundle.js:17407:12)\n    at ApolloLink.request 
    }
  ]
}

рдЗрд╕ рд▓рд┐рдВрдХ рдкрд░ рдЖрдкрдХреЗ рдХрд╛рдо рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд-рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж! рдпрд╣ REST API рдХреЗ рд╕рд╛рде рдЕрдЯрдХреЗ рд╣реБрдП рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП GraphQL рдЬреИрд╕реА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рд▓рд╛рдХрд░ REST рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЕрдзрд┐рдХ рдкреНрд░рдмрдВрдзрдиреАрдп рдмрдирд╛рддрд╛ рд╣реИред

help wanted ЁЯЫа questionтЭФ

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

vреж.рей.рез рдореЗрдВ рддрдп рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП -- рдЕрдм рдЙрдкрд▓рдмреНрдз рд╣реИ!

рд╕рднреА 6 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

@sinisterra рдЬрдм рд╣рдо рдЕрдкрдиреЗ рдРрдк рдореЗрдВ forward is not a function рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдорддреМрд░ рдкрд░ рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реЛрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдХрд┐рд╕реА рдПрдХ рдиреЛрдб рдкрд░ @client рдпрд╛ @rest(тАж) рдирд┐рд░реНрджреЗрд╢ рднреВрд▓ рдЬрд╛рддреЗ рд╣реИрдВред рдХреНрдпрд╛ рдЖрдкрдХреЗ рд▓рд┐рдП рдРрд╕рд╛ рд╣реИ?

fetch рд╕рд╛рде рдЖрдкрдХреА рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ -- рдЖрдк рдХрд┐рд╕ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд░рд╣реЗ рд╣реИрдВ?

@fbartho рдирд╣реАрдВ, рдореИрдВ рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдмрд┐рд▓реНрдХреБрд▓ рд╡рд╣реА рдХреНрд╡реЗрд░реА рдЪрд▓рд╛ рд░рд╣рд╛ рд╣реВрдВ, @rest рдирд┐рд░реНрджреЗрд╢ рдареАрдХ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рдореИрдВ рдЧреВрдЧрд▓ рдХреНрд░реЛрдо ремрен.реж.реж.рейрейрепрем.ремреи рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдБред рдЬрдм рдореИрдВрдиреЗ рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ 60.0.1 рдореЗрдВ рдЙрджрд╛рд╣рд░рдг рдЪрд▓рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рддреЛ рдпрд╣ рднреА рд╡рд┐рдлрд▓ рд░рд╣рд╛ рд▓реЗрдХрд┐рди рдПрдХ рдЕрд▓рдЧ рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде: Network error: 'credentials' member of RequestInit 'null' is not a valid value for enumeration RequestCredentials.

рдпрд╣ рдХреЗрд╡рд▓ рдЯреВрдЯреЗ рд╣реБрдП рдЙрджрд╛рд╣рд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИ! рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдореБрджреНрджрд╛ рдмрд╣реБрдд рдЧрдВрднреАрд░ рд╣реИред
рдореБрдЭреЗ рдЕрднреА рднреА рд╡рд╣реА рддреНрд░реБрдЯрд┐ рдорд┐рд▓ рд░рд╣реА рд╣реИ, рдореЗрд░реЗ рдЙрддреНрдкрд╛рджрди рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдЬреЛ рдкрд┐рдЫрд▓реЗ рдХрдИ рдорд╣реАрдиреЛрдВ рд╕реЗ рдЕрдкреЛрд▓реЛ-рд▓рд┐рдВрдХ-рд░реЗрд╕реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдареАрдХ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рдерд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЕрдкрдбреЗрдЯ рдХреЗ рдХрд╛рд░рдг рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП?
рдореИрдВ рдХреНрд░реЛрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ Version 67.0.3396.79 (Official Build) (64-bit)

рд╕рдлрд╛рд░реА рдФрд░ рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ рдореЗрдВ рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд░рд╣реА рд╣реИ .. рдореБрдЭреЗ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЯреАрдмреАрдПрдЪ рдирд╣реАрдВ рдорд┐рд▓рд╛ .. рдореЗрд░реЗ рдЖрд╡реЗрджрди рдХрд╛ рдПрдХ рд╣реА рд╕рдВрд╕реНрдХрд░рдг 24 рдордИ рд╕реЗ рдареАрдХ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рдерд╛ред

рдпрд╣ рдХреЗрд╡рд▓ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд╕рд╛рде рд╣реЛ рд░рд╣рд╛ рд╣реИ рдЬреЛ рдореИрдВ рдЕрдкреЛрд▓реЛ-рд▓рд┐рдВрдХ-рд░реЗрд╕реНрдЯ рдХреЗ рд╕рд╛рде рдХрд░рддрд╛ рд╣реВрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВрдиреЗ рдЕрдкрдирд╛ рдХрд╕реНрдЯрдордлрдЪ рдПрдлрдПрди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рд╣реИ, рдЬреЛ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИред _(уГД)_/┬п

рдЬрдм рдореИрдВ рдЕрдкрдирд╛ customFetch config рд╣рдЯрд╛рддрд╛ рд╣реВрдВ рддреЛ рдореБрдЭреЗ рднреА рд╡рд╣реА рддреНрд░реБрдЯрд┐ рдорд┐рд▓ рд░рд╣реА рд╣реИред

рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдорд┐рд▓реАред
рдореИрдВ customFetch рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдЬрд┐рд╕реЗ apollo-link-rest рджреНрд╡рд╛рд░рд╛ рд╡рд┐рдХрд▓реНрдк рдкреИрд░рд╛рдореАрдЯрд░ credentials: null рд╕рд╛рде рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдХреНрд░реЛрдо рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдг рд╕рд╣рд┐рдд рд╕рднреА рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдХреЗ рд╕рд╛рде рдпрд╣ рддреНрд░реБрдЯрд┐ рдкреИрджрд╛ рдХрд░ рд░рд╣рд╛ рд╣реИред

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

export function fetchWithAuth(url, options = {}) {
  // this fixes apollo-link-rest providing credentials: null options
  const { credentials, ...opt } = options
  return fetch(url, getOptions(opt));
}

рдореИрдВ рднреА рджреАрд╡рд╛рд░ рдХреЗ рдЦрд┐рд▓рд╛рдл рдЕрдкрдирд╛ рд╕рд┐рд░ рдкреАрдЯ рд░рд╣рд╛ рдерд╛, "рдиреЗрдЯрд╡рд░реНрдХ рддреНрд░реБрдЯрд┐: рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓" рдХреНрд╡реЗрд░реА рдХреЛ рдЕрдкреЛрд▓реЛ-рд▓рд┐рдВрдХ-рд░реЗрд╕реНрдЯ рдХреЗ рд╕рд╛рде рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рд╕реЗ рд░реЛрдХ рд░рд╣рд╛ рдерд╛ред @JuHwon рд╕рд╣реА рд╣реИ, рдпрд╣ рд░реЗрд╕реНрдЯрд▓рд┐рдВрдХ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдкрд░ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕ рд╡рд┐рдХрд▓реНрдк рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред рдЬрдмрдХрд┐ рдкреВрд░реНрд╡ рдореЗрдВ рдпрд╣ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХреЗ рдЕрдиреБрд╕рд╛рд░ рд╡реИрдХрд▓реНрдкрд┐рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рдерд╛, рдЕрдм рдореИрдВ рдЗрд╕реЗ рдХреЗрд╡рд▓ рдЗрд╕ рддрд░рд╣ рдХреЗ рд╡рд┐рдХрд▓реНрдк рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рд╣реА рдХрд╛рдо рдкрд░ рд▓рд╛ рд╕рдХрддрд╛ рд╣реВрдВ:

const restLink = new RestLink({  
  uri: ${process.env.REACT_APP_API_URL}/,  
  credentials: 'same-origin',  // eg. or credentials: 'omit', etc
});

vреж.рей.рез рдореЗрдВ рддрдп рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП -- рдЕрдм рдЙрдкрд▓рдмреНрдз рд╣реИ!

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

fkolar picture fkolar  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

blatoo picture blatoo  ┬╖  6рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

MichelDiz picture MichelDiz  ┬╖  7рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

ssuvorov picture ssuvorov  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

timhwang21 picture timhwang21  ┬╖  7рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ