я создал небольшой API с помощью Node / Express и пытаюсь получить данные с помощью Angularjs, но поскольку моя html-страница работает под apache на localhost: 8888 и API-интерфейс узла прослушивает порт 3000, я получаю No 'Access-Control- Allow-Origin'. Я пытался использовать node-http-proxy
Vhosts Apache, но безуспешно, смотрите полную ошибку и код ниже.
XMLHttpRequest не может загрузить localhost: 3000. В запрошенном ресурсе отсутствует заголовок «Access-Control-Allow-Origin». Origin 'localhost: 8888', следовательно, не разрешен доступ. "
// 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')
Угловой код
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>
Принятый ответ - хорошо, если вы предпочитаете что-то более короткое, вы можете использовать плагин cors, доступный для Express.js
Это просто в использовании, для этого конкретного случая:
источник
{origin: 'null'}
его для работы ... Судя по всему, мой браузер отправляетnull
в качестве источника?app.use(cors({origin: '*'}));
сработало для меня, согласно enable-cors .Другой способ, просто добавьте заголовки к вашему маршруту:
источник
)
смайлик меня смутилВерхний ответ работал отлично для меня, за исключением того, что мне нужно , чтобы белый список доменов более чем один.
Кроме того, топовый ответ страдает от того факта, что
OPTIONS
запрос не обрабатывается промежуточным ПО, и вы не получаете его автоматически.Я сохраняю домены в белом списке, как
allowed_origins
в конфигурации Express, и помещаю правильный домен в соответствии сorigin
заголовком, посколькуAccess-Control-Allow-Origin
не позволяет указывать более одного домена.Вот чем я закончил:
источник
Код ответа разрешен только для localhost: 8888. Этот код не может быть развернут на производстве или на другом сервере и имени порта.
Чтобы заставить это работать для всех источников, используйте это вместо этого:
источник
Установите зависимость cors в вашем проекте:
Добавьте в свой файл конфигурации сервера следующее:
У меня работает с версией 2.8.4 cors.
источник
"cors": "^2.8.5", "express": "^4.16.3",
отлично работает только с предложенной строкой @monikaja. Спасибо!Это сработало для меня.
Вы можете изменить *, чтобы соответствовать вашим потребностям. Надеюсь, это поможет.
источник
Привет это происходит, когда интерфейс и бэкэнд работает на разных портах. Браузер блокирует ответы от бэкэнда из-за отсутствия заголовков CORS. Решение состоит в том, чтобы добавить заголовки CORS в бэкэнд-запрос. Самый простой способ - использовать пакет cors npm.
Это включит заголовки CORS во всех ваших запросах. Для получения дополнительной информации вы можете обратиться к документации Cors
https://www.npmjs.com/package/cors
источник
источник
Добавьте следующий код в app.js NODEJ Restful api, чтобы избежать ошибки «Access-Control-Allow-Origin» в angular 6 или любой другой платформе
источник
Вы можете использовать "$ http.jsonp"
ИЛИ
Ниже представлен обход хрома для локального тестирования.
Вам нужно открыть свой хром с помощью следующей команды. (Нажмите окно + R)
Примечание: ваш хром не должен быть открытым. При запуске этой команды Chrome откроется автоматически.
Если вы вводите эту команду в командной строке, выберите каталог установки Chrome и используйте эту команду.
Ниже приведен код скрипта для открытого chrome в MAC с «--allow-file-access-from-files»
второй вариант
Вы можете просто использовать open (1) для добавления флагов: open -a 'Google Chrome' --args --allow-file-access-from-files
источник
источник