Eu criei uma pequena API usando o Node / Express e tentando extrair dados usando o Angularjs, mas como minha página html está sendo executada no apache no localhost: 8888 e a API do nó está escutando na porta 3000, estou recebendo o No 'Access-Control- Allow-Origin '. Eu tentei usar o node-http-proxy
Vhosts Apache, mas não tendo muito sucesso, veja o código e o erro completo abaixo.
XMLHttpRequest não pode carregar localhost: 3000. Nenhum cabeçalho 'Access-Control-Allow-Origin' está presente no recurso solicitado. Portanto, 'localhost local: 8888' de origem não é 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>
A resposta aceita é boa. Caso prefira algo mais curto, você pode usar um plugin chamado cors disponível para o Express.js
É simples de usar, neste caso em particular:
fonte
{origin: 'null'}
para que ele funcionasse ... Aparentemente, meu navegador envianull
como origem?app.use(cors({origin: '*'}));
trabalhou para mim, de acordo com enable-cors .Outra maneira, é simplesmente adicionar os cabeçalhos à sua rota:
fonte
)
de emoticon me confundiuA resposta principal funcionou bem para mim, exceto que eu precisava colocar mais de um domínio na lista de permissões.
Além disso, a resposta principal sofre com o fato de a
OPTIONS
solicitação não ser tratada pelo middleware e você não a receber automaticamente.Eu armazeno domínios
allowed_origins
na lista de permissões como na configuração do Express e coloco o domínio correto de acordo com oorigin
cabeçalho, poisAccess-Control-Allow-Origin
não permite especificar mais de um domínio.Aqui está o que eu acabei com:
fonte
O código de resposta permite apenas localhost: 8888. Este código não pode ser implantado na produção ou em um nome de servidor e porta diferente.
Para fazê-lo funcionar em todas as fontes, use isto:
fonte
Instale a dependência de cors no seu projeto:
Adicione ao seu arquivo de configuração do servidor o seguinte:
Funciona para mim com a versão 2.8.4 cors.
fonte
"cors": "^2.8.5", "express": "^4.16.3",
funciona bem apenas com a linha @monikaja sugerida. Obrigado!Isso funcionou para mim.
Você pode alterar * para atender às suas necessidades. Espero que isso possa ajudar.
fonte
Oi, isso acontece quando o front-end e o back-end estão sendo executados em portas diferentes. O navegador bloqueia as respostas do back-end devido à ausência nos cabeçalhos do CORS. A solução é fazer adicionar os cabeçalhos CORS na solicitação de back-end. A maneira mais fácil é usar o pacote cors npm.
Isso permitirá os cabeçalhos CORS em todas as suas solicitações. Para mais informações, consulte a documentação do cors
https://www.npmjs.com/package/cors
fonte
fonte
Adicione o seguinte código no app.js da API NODEJ Restful para evitar o erro "Access-Control-Allow-Origin" no angular 6 ou em qualquer outra estrutura
fonte
Você pode usar "$ http.jsonp"
OU
Abaixo está a solução alternativa para o chrome para testes locais
Você precisa abrir o chrome com o seguinte comando. (Pressione janela + R)
Nota: seu chrome não deve estar aberto. Quando você executa este comando, o chrome será aberto automaticamente.
Se você estiver inserindo esse comando no prompt de comando, selecione o diretório de instalação do chrome e use este comando.
Abaixo do código de script para o chrome aberto no MAC com "--allow-file-access-from-files"
segundas opções
Você pode simplesmente usar o open (1) para adicionar os sinalizadores: open -a 'Google Chrome' --args --allow-file-access-from-files
fonte
fonte