2017-07-14 5 views
0

Ich entwickle gerade ein Projekt, bei dem ich Zugriff auf alle Warteschlangen haben muss, die mit einem bestimmten Rabbitmq verbunden sind. Um dies zu tun, habe ich versucht, diese Informationen mit Rabbitmq RESTful Services zu erhalten. Ich habe versucht, ein Beispiel mit POSTman zu machen, wie eine Anfrage an localhost: 15672/api/connections mit guest: guest als Benutzername und Passwort, und alles hat gut funktioniert; Allerdings, wenn ich versuchte, die gleiche Anforderung mit meinem Projekt auf Angular die folgende Fehlermeldung zu senden erschienen:Verwenden von RabbitMQ RESTful-Diensten mit Angular2

zone.js:2177 XMLHttpRequest cannot load localhost:15672/api/overview. Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https.

Ich habe einige der Forschung über diesen Fehler und alle Lösungen, die ich vorgeschlagen finden konnte, dass ich meinen Browser erlauben sollte in Chrome, um CORS-Anfragen zu stellen, aber diese Lösung würde erfordern, dass ich jeden Browser änderte, der mein Projekt ausführen würde, was nicht effektiv wäre. Weiß jemand einen anderen Weg, wie ich Rabbitmqs Informationen mit einer Angular 2-Anwendung bekommen könnte?

Vielen Dank im Voraus!

Edit:

Auch, wenn ich "http: //" hinzufügen zu Beginn der Anforderung ändert sich die Fehlermeldung:

XMLHttpRequest cannot load http://localhost:15672/api/overview . Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin ' http://localhost:4200 ' is therefore not allowed access. The response had HTTP status code 405.

Hier ist, wie mein Code wie folgt aussieht:

@Injectable() 
export class RabbitHttp { 

protected headers: Headers; 

constructor(private http: Http, private router: Router, 
    public globalService: GlobalService 
) { 
} 
    public get(url: string, parameters: any): Promise<Response> { 
    url = "http://" + url; 
    this.setDefaultHeaders(parameters, url); 
    return this.http.get(url, { headers: this.headers }).toPromise(); 
}; 
private setDefaultHeaders(data: any, url: string): void { 
    this.headers = new Headers(); 
    this.headers.append("Content-Type", "application/json"); 
    this.headers.append("Authorization", "Basic " + data); 
    this.headers.append("Access-Control-Allow-Origin", url); 
} 
} 

der Kaninchen-Service ist mit seinen 6 Standard-Plugins gestartet, die Sie mit dem Befehl enable

rabbitmq-plugins enable rabbitmq_management

Was die URL und die Parameter, die URL in der Funktion erhalten ist localhost: 15672/api/Überblick und die Parameter sind Gast: Gast

Antwort

0

Sie in this code sehen können, die CORS-Header sind zurückgegeben, wenn Die Anfrage enthält einen Origin Header (match_origin Funktion).

Die Anforderungen, die Sie mit Angular erstellen, müssen einen Origin Header enthalten.

+0

Es enthält, Der Header meiner Anwendung ist wie folgt definiert: this.headers = new Headers(); this.headers.append ("Zugriffssteuerung-Zulassen-Ursprung", URL); this.headers.append ("Inhaltstyp", "application/json"); this.headers.append ("Authorization", "Basic" + Daten); –

+0

Die Kopfzeile muss den Namen "Origin" haben - https://github.com/rabbitmq/rabbitmq-management/blob/master/src/rabbit_mgmt_cors.erl#L72-L93 Wenn Sie Code bereitstellen können, der dieses Problem reproduziert, beheben es wird viel schneller gehen. Ich kann nur raten, was Sie falsch machen. –

+0

Danke =), habe gerade meinen ursprünglichen Post mit dem Code bearbeitet, den ich gerade benutze. –

Verwandte Themen