He creado una pequeña API usando Node / Express y tratando de extraer datos usando Angularjs, pero como mi página html se ejecuta bajo apache en localhost: 8888 y la API de nodo está escuchando en el puerto 3000, obtengo el No 'Control de acceso- Permitir origen '. Intenté usar node-http-proxy
Apache y Vhosts pero no tengo mucho éxito, vea el error completo y el código a continuación.
XMLHttpRequest no puede cargar localhost: 3000. No hay encabezado 'Access-Control-Allow-Origin' presente en el recurso solicitado. El origen 'localhost: 8888' no tiene acceso permitido ".
// Api Using Node/Express
var express = require('express');
var app = express();
var contractors = [
{
"id": "1",
"name": "Joe Blogg",
"Weeks": 3,
"Photo": "1.png"
}
];
app.use(express.bodyParser());
app.get('/', function(req, res) {
res.json(contractors);
});
app.listen(process.env.PORT || 3000);
console.log('Server is running on Port 3000')
Código angular
angular.module('contractorsApp', [])
.controller('ContractorsCtrl', function($scope, $http,$routeParams) {
$http.get('localhost:3000').then(function(response) {
var data = response.data;
$scope.contractors = data;
})
HTML
<body ng-app="contractorsApp">
<div ng-controller="ContractorsCtrl">
<ul>
<li ng-repeat="person in contractors">{{person.name}}</li>
</ul>
</div>
</body>
La respuesta aceptada está bien, en caso de que prefiera algo más corto, puede usar un complemento llamado cors disponible para Express.js
Es fácil de usar, para este caso particular:
fuente
{origin: 'null'}
para que funcione ... Aparentemente, ¿mi navegador envíanull
como origen?app.use(cors({origin: '*'}));
trabajó para mí, según enable-cors .Otra forma es simplemente agregar los encabezados a su ruta:
fuente
)
de smiley me confundióLa respuesta principal funcionó bien para mí, excepto que necesitaba incluir en la lista blanca más de un dominio.
Además, la respuesta principal adolece del hecho de que la
OPTIONS
solicitud no es manejada por el middleware y no la obtienes automáticamente.Almacene dominios
allowed_origins
en la lista blanca como en la configuración Express y pongo el dominio correcto de acuerdo con elorigin
encabezado, yaAccess-Control-Allow-Origin
que no permite especificar más de un dominio.Esto es lo que terminé con:
fuente
El código de respuesta solo permite localhost: 8888. Este código no se puede implementar en la producción o en un servidor y nombre de puerto diferentes.
Para que funcione para todas las fuentes, use esto en su lugar:
fuente
Instale la dependencia de cors en su proyecto:
Agregue a su archivo de configuración del servidor lo siguiente:
Funciona para mí con la versión 2.8.4 cors.
fuente
"cors": "^2.8.5", "express": "^4.16.3",
funciona bien solo con la línea que @monikaja sugirió. ¡Gracias!Esto funcionó para mí.
Puede cambiar * para satisfacer sus necesidades. Espero que esto pueda ayudar.
fuente
Hola, esto sucede cuando el front-end y el back-end se ejecutan en diferentes puertos. El navegador bloquea las respuestas del back-end debido a la ausencia en los encabezados CORS. La solución es hacer agregar los encabezados CORS en la solicitud de back-end. La forma más fácil es usar el paquete cors npm.
Esto habilitará los encabezados CORS en toda su solicitud. Para obtener más información, puede consultar la documentación de cors
https://www.npmjs.com/package/cors
fuente
fuente
Agregue el siguiente código en app.js de NODEJ API relajante para evitar el error "Access-Control-Allow-Origin" en angular 6 o cualquier otro marco
fuente
Puede usar "$ http.jsonp"
O
A continuación se muestra la solución para Chrome para pruebas locales
Debes abrir tu Chrome con el siguiente comando. (Presione ventana + R)
Nota: su Chrome no debe estar abierto. Cuando ejecute este comando, Chrome se abrirá automáticamente.
Si está ingresando este comando en el símbolo del sistema, seleccione su directorio de instalación de Chrome y luego use este comando.
Debajo del código de script para abrir Chrome en MAC con "--allow-file-access-from-files"
segundas opciones
Puede usar open (1) para agregar las banderas: open -a 'Google Chrome' --args --allow-file-access-from-files
fuente
fuente