Как исправить проблему с политикой CORS в Angular (MEAN.IO - PullRequest
0 голосов
/ 04 апреля 2019

Я использую MEAN стек (NodeJS, Express, Angular 6, MongoDB). Есть простая функция для получения данных из внешнего API, но всякий раз, когда он отправляет запрос, я получаю сообщение об ошибке:

let api = 'https://thongtindoanhnghiep.co/api/city';
return this.http.get<any>(api).subscribe( res =>{
    this.data = res;
  });

"ВАРИАНТЫ https://thongtindoanhnghiep.co/api/city 405 (метод не разрешен) Доступ к XMLHttpRequest по адресу 'https://thongtindoanhnghiep.co/api/city' из источника' http://localhost:4040' заблокирован политикой CORS: Ответ на предпечатный запрос не проходит проверку контроля доступа: не имеет статуса HTTP ok. "

Мой Chrome отключен веб-безопасности, установлено расширение CORS, и мое приложение было настроить и включить Cors на стороне вашего сервера. Когда я использую Почтальон, это работает хорошо.

Ответы [ 2 ]

0 голосов
/ 04 апреля 2019

В узле js вы исправили эту проблему в 2 типе

Тип 1

установка cors

npm install cors

var express = require('express')
var cors = require('cors')
var app = express()

app.use(cors())

// cors config
app.use(function (req, res, next) {
    res.header("Access-Control-Allow-Origin", "*");
    res.header("Access-Control-Allow-Methods", "GET,HEAD,OPTIONS,POST,PUT,DELETE");
    res.header("Access-Control-Allow-Headers", "*");
    next();
});

app.listen(8083, () => {
    console.log('Server connected with 8083');
})

Тип 2

npm install browser-sync --save

var fs = require('fs');
var http = require('http');
var https = require('https');
var privateKey  = fs.readFileSync('node_modules/browser-sync/certs/server.key', 'utf8');
var certificate = fs.readFileSync('node_modules/browser-sync/certs/server.crt', 'utf8');
var credentials = {key: privateKey, cert: certificate};

var httpServer = http.createServer(app);
var httpsServer = https.createServer(credentials, app);

httpServer.listen(8080,()=>{
    console.log('Server connected with 8080');
});

httpsServer.listen(8081,()=>{
    console.log('Server connected with 8081');
});

Таким образом, вы предоставляете промежуточное программное обеспечение Express для собственного сервера http / https

Если вы хотите, чтобы ваше приложение работало на портах ниже 1024, вам нужно будет использовать команду sudo (не рекомендуется) или использовать обратный прокси-сервер (например, nginx, haproxy).

0 голосов
/ 04 апреля 2019

Вы можете использовать это в вашей точке входа приложения Node.js

var cors = require('cors')
app.use(cors())

Или

Вы можете использовать объект ответа для установки заголовка

response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");

Надеемсяэто должно решить проблему.

...