Si vous avez déjà créé une application Web qui devait demander des données à un domaine différent, vous avez probablement dû vous habituer à la politique de son origine sur le navigateur et du navigateur. .
Dans cet article, nous allons apprendre à résoudre les problèmes CORS en utilisant les capacités de proxy de Create React App .
Le problème
Si notre application est hébergée sous un certain domaine (par exemple, domain1.com
) et tente d'envoyer une requête à une API résidant dans un domaine différent (par exemple, domain2.com
), puis à la même politique d'origine du navigateur. lance et bloque la demande.
CORS est une fonctionnalité qui permet à domain2.com
de dire au navigateur que c'est cool pour domain1.com
de lui envoyer des demandes, en envoyant certains en-têtes HTTP.
Cependant, CORS peut être difficile à comprendre, aussi les gens l’évitent-ils complètement en servant leur serveur et leur serveur sous le même omain in production.
Create React App nous permet de reproduire cette configuration en développement, de sorte que nous n’ayons pas à nous en occuper avec CORS. Deux options sont possibles: une très simple mais pas très flexible et une qui demande un peu plus de travail mais qui est très flexible.
Proxy automatique
Nous pouvons dire à Create React App d'intercepter les demandes avec des inconnus. les itinéraires et les envoyer à un domaine différent, en utilisant l'option proxy
dans package.json
. Cela ressemble à ceci:
{
"name": "client-flickr",
"version": "0.1.0",
"privé": vrai,
"dépendances": {
"réagir": "^ 16.8.6",
"react-dom": "^ 16.8.6",
"react-scripts": "^ 2.1.8"
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "test de réact-scripts",
"éjecter": "réagir-scripts éjecter"
},
"proxy": "http: // localhost: 4000"
}
Lorsque nous démarrons notre application, elle sera servie sous http: // localhost: 3000
. Si nous demandons le chemin racine /
Create React App répondra avec le code HTML correspondant à notre application. Mais si nous devions demander un chemin différent comme / api
Create React App le transmettrait de manière transparente à http: // localhost: 4000 / api
.
Si nous examinons Si le réseau vous demande dans les outils de développement de votre navigateur, nous verrons que la demande a été adressée à http: // localhost: 3000 / api
mais il a en fait été desservi par http: // localhost : 4000 / api
à l'insu du navigateur.
Cela ne peut pas être plus facile!
Proxication manuelle
Si nous avons besoin de plus de contrôle sur la manière dont ces requêtes inter-domaines sont effectuées, nous en avons un autre L'option, qui consiste à créer un fichier src / setupProxy.js
ressemble à ceci:
module.exports = function (app) {
// ...
};
Cette fonction reçoit app
un exemple d'application Express afin que nous puissions en faire ce que nous voulons.
Par exemple, nous pouvons utiliser un middleware tel que [19659019] http-proxy-middleware aux requêtes proxy exactement comme nous l'avons fait avec l'option proxy
:
const proxy = require ("http-proxy-middleware");
module.exports = app => {
app.use (
"/ api",
Procuration({
cible: "http: // localhost: 4000",
changeOrigin: true
})
)
};
Mais nous pouvons aller plus loin et utiliser les options de http-proxy-middleware
telles que pathRewrite
pour modifier le chemin de la requête:
const proxy = require (" http-proxy-middleware ");
module.exports = app => {
app.use (
"/ api",
Procuration({
cible: "http: // localhost: 4000",
changeOrigin: true,
pathRewrite: {
"^ / api": "/ api / v1"
}
})
)
};
Avec cette configuration, une demande faite à http: // localhost: 3000 / api / foo
sera transmise à http: // localhost: 4000 / api / v1 / foo
].
Nous pourrions aussi ajouter un enregistreur comme morgan
tant que nous y sommes:
const proxy = require ("http-proxy-middleware");
const morgan = require ("morgan");
module.exports = app => {
app.use (
"/ api",
Procuration({
cible: "http: // localhost: 4000",
changeOrigin: true,
pathRewrite: {
"^ / api": "/ api / v1"
}
})
)
app.use (morgan («combiné»));
};
Chaque fois qu’une requête est envoyée à notre proxy, elle est connectée à la console.
Les possibilités sont vraiment infinies.
Conclusion
Si votre application Web doit demander des données à partir d’une autre domaine, et vous voulez que votre environnement de développement imite une configuration de production où les services frontend et backend sont desservis à partir du même domaine, assurez-vous de consulter les proxy
et src / setupProxy.js
options de Créer une application React.
Pour en savoir plus sur le développement d'applications pour React avec Create React App? Consultez les articles ci-dessous et n'oubliez pas de visiter notre Toutes les choses réagissent pour un large éventail d'informations et de pointeurs sur tous les types de réactions.
Les commentaires sont désactivés en mode aperçu.
Source link