javascript - Tindakan React Redux Fetch mengembalikan "415 (Jenis Media Tidak Disokong)" dan "401 (tidak dibenarkan)"
Saya mempunyai satu tindakan yang mencipta fetch untuk POST klien kembali ke API.
Saya menghantar JWT dalam "headers" yang sendiri bukan masalah kerana ia juga digunakan dalam GET yang berfungsi dengan baik... tetapi tidak dalam POST. Berikut adalah tindakan saya:
export const createNewClient = (payload) =>
(dispatch, getState) => {
dispatch({ type: REQUEST_CREATE_NEW_CLIENT, payload })
const jwt = getJwt()
if (!jwt) {
throw new Error('No JWT present')
}
const token = jwt.access_token
const headers = new Headers({
'Authorization': `bearer ${token}`
})
debugger
const task = fetch('/api/client/create', {
method: 'POST',
body: JSON.stringify(payload),
headers,
})
.then(handleErrors)
.then(response => response.json())
.then(data => {
dispatch({ type: RECEIVE_CREATE_NEW_CLIENT, payload: data })
dispatch({
type: SAVE_MESSAGE, payload: {
message: "Successfully saved client",
type: 'success'
}
})
})
.catch(error => {
//clearJwt()
dispatch({ type: ERROR_CREATE_NEW_CLIENT, payload: error.message })
dispatch({ type: SAVE_MESSAGE, payload: { message: error.message, type: 'error' } })
})
addTask(task)
return task
}
Saya cuba mengubah suai pengepala untuk memasukkan UTF-8 seperti ini.
headers: {
'Content-Type': 'application/json;charset=UTF-8'
},
Walau bagaimanapun, ini hanya memberikan saya 401 Tidak Dibenarkan yang bermaksud dengan menggunakan ini, ia adalah jenis media yang betul tetapi kini tidak akan diterima.
JWT yang sama itu berfungsi dengan baik dalam arahan Fetch GET jadi JWT itu sendiri bukan masalah - saya percaya ia mungkin cara saya menulis 'Fetch'.
Sekarang saya melakukan perkara yang sama dalam Postman dan saya berjaya, tetapi tidak dengan Fetch ini...
Apa yang telah saya terlepas atau tersusun secara salah untuk Fetch POST supaya JWT diterima dan sebagainya
Jawapan #1
Jika ia berfungsi seperti dalam imej yang disediakan
maka yang berikut akan berfungsi
fetch('/api/client/create', {
method: 'POST',
body: JSON.stringify(payload),
headers: {
'Authorization': `bearer ${token}`,
'Content-Type': 'application/json',
}
})
