2017-07-30 6 views
1

J'ai une application écrite en Angular 4 appelant un couchdb tous sur localhost mais différents ports. J'utilise couchdb avec une application Aurelia sans aucun problème.Angular 4 appel couchdb a CORS erreur, mais aucun contrôle en amont apparaît dans fiddler

Maintenant que je passe à angulaire 4 et angulaire MD, je peux sembler passer ces problèmes cors.

Voici le code qui appelle CouchDB

commonUpdate privé (contenu: any, url: string, méthode: string = 'put') {

console.log("in common") 
const myHeaders = new Headers(); 
myHeaders.append('Content-Type', 'application/json'); 

const options = new RequestOptions({ headers: myHeaders, withCredentials: true }); 

if (content && content._rev && content._rev.length >= 5) { 
    url = url + '/' + content._id; 
} 

const status = new DbStatus(); 
status.ok = false; 

let response: any; 
try { 
    if (content) { 
    const contentJson: string = JSON.stringify(content); 
    this.http.post(url, contentJson, options).map(res => res.json()).subscribe(data => { 
     console.log(data['results']); 
    }) 
    } 

    status.ok = this.isHttpStatusSuccess(response.status); 
    if (status.doc) { 
    if (Array.isArray(status.doc.docs)) { 
     if (status.doc.docs.length === 0) { 
     status.ok = false; 
     status.reason = 'Empty Array'; 
     if (!status.error) status.error = status.reason; 
     } 
    } 
    } 
    status.httpStatus = response.status; 
    status.response = response; 
} catch (error) { 
    status.ok = false; 
} 

Message d'erreur:

VM27427: 1 XMLHttpRequest ne peut pas charger localhost: 5984/_session. Les demandes d'origine croisée ne sont prises en charge que pour les schémas de protocole: http, data, chrome, chrome-extension, https.

[cors] 
origins = * 
credentials = true 
headers = accept, authorization, content-type, origin, referer 
Couch-Rev, Set-Cookie 
methods = GET, PUT, POST, HEAD, DELETE 

Je ne comprends pas pourquoi cela fonctionne. Encore une fois, fiddler n'affiche pas de demande de méthode OPTION de contrôle en amont. Toutefois, l'exécution de la méthode OPTION à partir de postman renvoie les méthodes autorisées de GET et HEAD. Peut-être que le navigateur est en cache, mais j'ai des outils de dev ouverts avec la désactivation de la mise en cache cochée.

Suggestions

Répondre

2

VM27427: 1 XMLHttpRequest ne peut pas charger localhost: 5984/_SESSION. Les demandes d'origine croisée ne sont prises en charge que pour les schémas de protocole: http, data, chrome, chrome-extension, https.

Cela semble que le problème est juste que l'URL que vous donnez à l'appel this.http.post dans votre code n'a pas partie de ce protocole est, vous ne donnez localhost:5984/_session à l'appel, mais vous devriez être lui donnant http://localhost:5984/_session. Vous devez simplement ajouter le http://. Donc, pour ce qui est de savoir pourquoi vous ne voyez pas une requête OPTIONS, je pense que c'est seulement parce que le navigateur s'arrête avant d'essayer le OPTIONS - parce que sans un protocole dans l'URL, le navigateur ne peut même pas déterminer si l'URL que vous avez donnée est d'origine croisée ou non.