Кліент для прыкладання ў Redux
На мінулых занятках мы практычна завяршылі працу з сервернай часткай для нашага прыкладання, мы крыху дапоўнім яе па меры неабходнасці у наступных уроках. Цяпер нам неабходна стварыць кліента для прыкладання, які будзе адпраўляць HTTP-запыты на сервер.
Адчынём наша прыкладанне з прадуктамі і
у папцы api
створым файл client.js
.
Для пачатку мы напішам самую функцыю client
,
якая будзе працаваць і для GET і для
POST запытаў. Параметрамі яна будзе атрымліваць
шлях, тып і цела запыту (у выпадку POST), калі
таковае маецца:
export async function client(url, method, body = {}) {}
Далей нам трэба сфармаваць аб'ект
options
, у якім мы будзем перадаваць
розную інфармацыю для запыту. Гэта
будзе тып запыту і загалоўкі:
export async function client(url, method, body = {}) {
const options = {
method: method,
headers: {
'Content-Type': 'application/json',
},
}
}
Уласцівасць body
у нас апцыянальна, мы павінны
перадаваць яго, калі ў нас POST-запыт. Для
гэтага ўнутры client
пасля кода для аб'екта
options
дадамо яго ў options
з целам
запыту ў фармаце JSON, калі абраны метад
POST:
if (method === 'POST') {
options.body = JSON.stringify(body)
}
Затым ніжэй у кодзе client
арганізуем блок
try
, у першай строчцы якога з дапамогай
fetch
атрымаем адказ ад сервера. У выпадку
няўдачы мы традыцыйна вернем проміс з
памылкай:
let data
try {
const response = await window.fetch(url, options)
} catch (err) {
return Promise.reject(err.message ? err.message : data)
}
Цяпер дадапоўнім код у блоке
try
. Пасля атрымання response
, нам
трэба яго апрацаваць. Вынямем з
яго даныя ў JSON і калі статус адказу
сігналізуе нам, што ўсё ў парадку, то
вернем аб'ект з данымі і інфармацыяй:
статусам, загалоўкамі і адрасам. Калі
ж статус не 'ok'
, то выкінем выключэнне
з тэкстам статусу:
try {
const response = await window.fetch(url, options)
data = await response.json()
if (response.ok) {
return {
status: response.status,
headers: response.headers,
url: response.url,
data,
}
}
throw new Error(response.statusText)
}
Код для функцыі client
у нас гатовы, засталася
толькі напісаць як будуць працаваць нашы метады
GET і POST пры выкліку. Давайце
напішам код для іх пасля функцыі client
.
Метад client.get
будзе прымаць у якасці
параметра шлях і выклікаць функцыю client
,
перадаючы ёй гэты шлях і тып запыту GET:
client.get = (url) => client(url, 'GET')
А client.post
павінен перадаваць для
client
шлях, тып запыту POST і
цела запыту:
client.post = (url, body) => client(url, 'POST', body)
На гэтым усё, наш маленькі кліент гатовы да працы з серверам.
Адчыніце ваша прыкладанне са студэнтамі,
стварыце ў ім у папцы api
файл
client.js
. Азнаёміўшыся з матэрыяламі
уроку напішыце (скапіюйце) код функцыі
client
і двух яе метадаў client.get
і client.post
.