2017-10-16 2 views
3

Je rencontre un problème CORS avec Ionic 3 lorsque j'essaie de faire des appels GET à une API. J'utilise le serveur local ionique, en cours d'exécution ionique servir dans la ligne de commande pour le serveur en direct.IONIC 3 CORS PROBLEME

Erreur Aucun en-tête 'Access-Control-Allow-Origin' n'est présent sur la ressource demandée. L'origine 'http://localhost:8100' n'est donc pas autorisée.

J'ai essayé de mettre à jour "ionic.config.json" avec réglage de proxy, mais cela ne semble pas fonctionner ..

{ 
    "name": "projectLeagueApp", 
    "app_id": "47182aef", 
    "type": "ionic-angular", 
    "integrations": { 
    "cordova": {} 
    }, 
    "proxies": [ 
    { 
     "path":"/games", 
     "proxyUrl": "https://api-2445582011268.apicast.io/games/" 
    } 
    ] 
} 

Mon Data Service

import { Injectable } from '@angular/core'; 
import { Http, Headers, RequestOptions } from '@angular/http'; 
import 'rxjs/add/operator/map'; 


@Injectable() 
export class DataProvider { 

    headers = new Headers({'user-key': '1234567890123'}); 
    options = new RequestOptions ({headers: this.headers}); 
    limit: number = 50; 

    constructor(public http: Http) { 
    console.log('Hello DataProvider Provider'); 
    } 

    getGames(genre, offset_num) { 

    let genre_id = genre; 
    let offset = offset_num; 

    return this.http.get('https://api-2445582011268.apicast.io/games/?fields=name,release_dates,screenshots&limit='+this.limit+'&offset='+offset+'&order=release_dates.date:desc&filter[genres][eq]='+genre_id+'&filter[screenshots][exists]', this.options) 
    } 

} 

Je suis en train de faire des appels à cet api

Demander Url https://api-2445582011268.apicast.io TÊTES Clé Valeur YOUR_KEY clé utilisateur Accepter application/json

Question primaire Mes appels échouent. Comment puis-je créer un proxy pour ce problème?

+1

Essayez de remplacer l'URL de la requête 'http.get' par'/games'. Le proxy va le remplacer par le vrai. – emroussel

Répondre

0

La fonctionnalité proxy attend que vous référençant le serveur local. Dans votre requête GET, vous êtes toujours pointé sur l'API distante. Si vous modifiez votre code à this.http.get('/games/...' il devrait commencer à fonctionner car la demande ira à http://localhost:8100/games..., que l'option "proxy" va attraper et transmettre à l'URL que vous avez fournie. Vous pouvez également mettre uniquement https://api-2445582011268.apicast.io dans le champ proxyUrl. Je pense que le reste du chemin est passthrough.

+0

Hey Jeff, J'ai fait ce que vous avez demandé. J'ai changé le proxyUrl juste à «https://api-2445582011268.apicast.io» et je ne reçois plus le problème de CORS. J'ai maintenant un autre problème.Je reçois une nouvelle erreur - "Erreur d'exécution Jeton inattendu H dans JSON à la position 0". Je ne suis pas sûr pourquoi je reçois cette erreur. –

+0

Jetez un oeil à votre demande via l'onglet Réseau chrome dev tools. Quel est le code de réponse HTTP? Vous pouvez voir plus d'informations là-dedans. En outre, vous ne savez pas si vous voyez quelque chose dans la console indiquant que le proxy traitait la demande. Peut-être plus d'informations là-bas. En outre, je recommande d'utiliser ARC ou Postman ou un client REST pour frapper votre service proxy configuré de manière similaire à ce que vous voyez dans l'onglet réseau. Il pourrait être plus facile de déboguer les appels API là-bas. –

2

Pour résoudre ce problème, s'il vous plaît changer les lignes suivantes

ionic.config.json

{ 
    "name": "projectLeagueApp", 
    "app_id": "47182aef", 
    "type": "ionic-angular", 
    "integrations": { 
    "cordova": {} 
    }, 
    "proxies": [ 
    { 
     "path":"/games", 
     "proxyUrl": "https://api-2445582011268.apicast.io/games" 
    } 
    ] 
} 

Vous devez supprimer le «/» qui est à la fin de de « proxyUrl ».

Mon Data Service

return this.http.get('/games/?fields=name,release_dates,screenshots&limit='+this.limit+'&offset='+offset+'&order=release_dates.date:desc&filter[genres][eq]='+genre_id+'&filter[screenshots][exists]', this.options) 

Dans l'appel http, l'URL doit commencer par '/ jeux'. '/ games' car ionic procèdera par procuration http://localhost:<port>/games à https://api-2445582011268.apicast.io/games

Veuillez utiliser la méthode ci-dessus pour les appels GET et POST externes dans votre application.

Merci.

+0

Merci! Cela a résolu mon problème !! –

+0

Content de vous aider. @ChrisSimmons S'il vous plaît upvote cette réponse afin que les développeurs avec des requêtes similaires peuvent obtenir une solution à partir de cela. –