J'ai essayé d'utiliser fetch pour appeler depuis le backend en utilisant rea, sans bibliothèque (comme Axios). J'ai donc créé cette fonction:
export function api(url, method, body, isHeaderContentType,isRequestHeaderAuthentication,header, succesHandler, errorHandler) {
const prefix = 'link';
console.log("url:",prefix+url);
const contentType = isHeaderContentType ? {
'Content-Type': 'application/json',
} : {};
const auth = isRequestHeaderAuthentication
? {
Authorization: `Bearer ${AuthUtils.getTokenUser}`,
}
: {};
fetch(prefix + url, {
method,
headers: {
...contentType,
...auth,
...header,
},
protocol:'http:',
body,
})
.then(response => {
response.json().then(json => {
if (response.ok) {
console.log("method", json);
if (succesHandler) {
succesHandler(json)
}
} else {
return Promise.reject(json)
}
})
})
.catch(err => {
console.log("error",`${url} ${err}`);
if (errorHandler) {
errorHandler(err);
}
})
} et l'appelle comme ça
api(
`link`,
"GET",
null,
true,
true,
null,
response => {
this.setState({profile:response.data})
},
err => {
console.log('error', err);
}
);
j'appelle mon api () dans cette fonction:
getProfileUser = () =>{
if (!isUserAuthenticated()){
history.Push('/signin')
}else {
api(
`link`,
"GET",
null,
true,
true,
null,
response => {
this.setState({profile:response.data})
},
err => {
console.log('error', err);
}
);
}
};
ceci est mon composant complet:
export default class Profile extends Component {
constructor(props) {
super(props);
this.state = {
profile:[]
}
}
getProfileUser = () =>{
if (!isUserAuthenticated()){
someCode
}else {
api(
`link`,
"GET",
null,
true,
true,
null,
response => {
this.setState({profile:response.data})
},
err => {
console.log('error', err);
}
);
}
};
componentDidMount() {
this.getProfileUser();
}
render(){
return(
<div>
hello
</div>
)
}
}
mais quand j'ai essayé de l'exécuter, j'ai eu une erreur comme celle-ci
TypeError: Impossible d'exécuter 'l'extraction' sur 'Fenêtre': Valeur non valide
Y a-t-il quelqu'un qui sait ce qui ne va pas avec mon code? La fonction fonctionne lorsque j'utilise la méthode "POST", mais pas quand j'utilise la méthode "GET"
Cela m'est également arrivé lorsque j'ai essayé d'ajouter un en-tête Authorization
à mes appels d'extraction. Dans mon cas, cela est dû à un caractère de nouvelle ligne dans la chaîne d’en-tête, c’est-à-dire Bearer:\nsomelong-token
. Le passage à la nouvelle ligne dans un espace a résolu le problème.
J'avais ceci en passant une chaîne avec un caractère de nouvelle ligne dans l'objet en-tête, par exemple:
const myString = 'this is a string \nand this is a new line';
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${token}`,
'subscriptionId': myString
}