javascript - falta - cors angular 6
Angular2: solicitud de origen cruzado bloqueada (3)
Eche un vistazo a las partes de cors en angular.io
https://angular.io/docs/ts/latest/guide/server-communication.html#!#cors
Algo como el de abajo (de arriba)
return this.jsonp
.get(wikiUrl, { search: params })
.map(response => <string[]> response.json()[1]);
Estoy tratando de usar la API de pronóstico con mi aplicación angular2. Sin embargo, cuando intento acceder a la API, aparece un error de origen cruzado. ¿Alguna idea de cómo puedo solucionar este error?
search(latitude: any, longitude: any){
console.log(latitude);
console.log(longitude);
let body = ''https://api.forecast.io/forecast/APIKEY/''+latitude+'',''+longitude ;
console.log(body);
this.http.get(body)
.map(
response => response.json()
).subscribe(
data => console.log("Data: "+data),
err => console.log("Error: "+err),
() => console.log(''Get Complete'')
);
}
Error
Petición cruzada de origen bloqueada: la misma política de origen no permite leer el recurso remoto en https://api.forecast.io/forecast/APIKEY/37.8267,-122.423 . (Motivo: Falta el encabezado CORS ''Acceso-Control-Permitir-Origen'').
Actualizar ahora usando JSONP
let body = ''https://api.forecast.io/forecast/APIKEY/''+latitude+'',''+longitude + ''?callback=?'' ;
console.log(body);
this.jsonp.get(body)
.map(response => response.json())
.subscribe(
data => console.log("Data: "+data),
err => console.log("Error: "+err),
() => console.log(''Get Complete'')
);
Error
Error0.def29191127bbc3e0100.hot-update.js: 59: 10 Objeto {_body: "La secuencia de comandos inyectada de JSONP no invoca ...", estado: 200, ok: cierto, estadoTexto: "Ok", encabezados: Objeto, tipo: 3, url : " https://api.forecast.io/forecast/60 ..."} 0.def29191127bbc3e0100.hot-update.js: 61: 10 SyntaxError: expresión esperada, got ''===''
Para forecast.io, debe usar JSONP. La forma más fácil de hacerlo usando jQuery es agregar ?callback=?
para solicitar URL:
$.getJSON(''https://api.forecast.io/forecast/<API KEY>/'' + latitude + '','' + longitude + "?callback=?", function(data) {
console.log(data);
});
No soy un experto en Angular 2, pero leyendo los documentos parece que necesitas importar el Jsonp y luego agregar una devolución de llamada. Más documentación aquí - vea la sección app/wiki/wikipedia.service.ts
.
Creo que algo como el siguiente código te funcionará
let body = "https://api.forecast.io/forecast/<API KEY>/'' + latitude + '','' + longitude + ''?callback=?''";
return this.jsonp
.get(body)
.map(response => <string[]> response.json()[1]);
Obtiene este problema porque el encabezado que está enviando no coincide con los encabezados en el back-end.
Supongamos que envía los siguientes encabezados:
contentHeaders = new Headers();
contentHeaders.append(''Authorization'', ''Your token used in app'');
contentHeaders.append(''Content-Type'', ''application/json'');
contentHeaders.append(''Access-Control-Allow-Origin'', ''*'');
Por lo tanto, los encabezados como Authorization
, Content-type
y Access-Control-Allow-Origin
deben coincidir con los encabezados permitidos en su back-end.
Por lo tanto, en el back Access-Control-Allow-Headers
end Access-Control-Allow-Headers
debe tener todos los encabezados anteriores:
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "Authorization, content-type, Access-Control-Allow-Origin");
De modo que aquí, en Access-Control-Allow-Headers
, debe pasar todos los encabezados que envía desde el frontend: ''Autorización'', ''Tipo de contenido'' y ''Control de acceso-Permitir-Origen''.
Funcionará perfectamente cuando uses el concepto anterior.
Espero que esta publicación sea útil para ti
Gracias