J'essaie de demander des données JSON à partir de l'API Genius à partir d'un navigateur utilisant Webpack et Axios.Demande d'origine croisée à l'API pour les données JSON - "Vous pouvez avoir besoin d'un chargeur approprié pour gérer ce type de fichier."
Il s'agit d'une demande d'origine croisée, que je sais parfois difficile. Pendant un certain temps, je recevais l'erreur suivante:
Failed to load https://api.genius.com/songs/378195: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access. The response had HTTP status code 403.
Je puis ajouté Access-Control-Allow-Origin: *
aux en-têtes. Maintenant, je reçois l'erreur suivante lorsque je tente de lancer npm run build
:
You may need an appropriate loader to handle this file type.
| const headers = {
| Authorization: `Bearer ${ACCESS_TOKEN}`,
| Access-Control-Allow-Origin: *
| };
|
Voici mes index.js d'entrée qui est fourni, avec mon jeton d'accès retiré. Je sais que webpack 2.x^charge JSON par défaut. Des conseils sur où aller à partir d'ici?
index.js
const axios = require('axios');
const ACCESS_TOKEN = "XXXXXXXXXXXXXX";
const id = '378195';
const url = `https://api.genius.com/songs/${id}`
const headers = {
Authorization: `Bearer ${ACCESS_TOKEN}`,
"Access-Control-Allow-Origin": "*"
};
window.newSong = function {
axios.get(url, { headers })
.then(response => {
console.log(response.data.response.song);
})
.catch(error => {
console.log(error);
});
}
webpack.config.js
const path = require('path');
const config = {
entry: './src/index.js',
output: {
filename: 'bundle.js',
path: path.resolve(__dirname, 'dist')
}
};
module.exports = config;
Merci d'avoir signalé cela. Cependant, j'ai fait les changements ci-dessus et maintenant je reçois la première erreur dans ma question initiale - 'Non 'Access-Control-Allow-Origin' en-tête est présent sur la ressource demandée. L'origine 'null' n'est donc pas autorisée. 'Des idées? – Evan
L'en-tête 'Access-Control-Allow-Origin' est pour la réponse (du serveur), pas pour la requête. Pour plus de détails, voir [Comment fonctionne l'en-tête Access-Control-Allow-Origin?] (Https://stackoverflow.com/questions/10636611/how-does-access-control-allow-origin-header-work). Je ne suis pas sûr de savoir exactement quel est le problème, mais cela peut être lié à leur API, car il semble qu'ils ne gèrent pas correctement la demande de contrôle en amont 'OPTIONS'. –