получение ошибки CORS при запуске двух серверов на локальном хосте - PullRequest
0 голосов
/ 03 января 2019

Я пытаюсь протестировать вызов API, выполняемый из реагирования на слой покоя узла, с помощью axios.Я получаю следующую ошибку CORS при просмотре консольного сообщения от Chrome.Я вижу следующую ошибку: «Доступ к XMLHttpRequest в« http://localhost:5001/api/login' от источника »http://localhost:5000' заблокирован политикой CORS: Ответ на предпечатный запрос не проходит проверку контроля доступа: Нет« Access-Control »-Allow-Origin 'заголовок присутствует на запрашиваемом ресурсе. "Странно то, что код в блоке catch вызывается для обоих методов (код в LoginApi предназначен для целей тестирования), но переменная error в параметре catch продолжает выдавать сообщение «ошибка не определена» при наведении курсора мышиЭто.1) Как это возможно, чтобы ошибка была неопределенной, если я нахожусь в блоке catch, потому что произошла ошибка?2) Как я получаю ошибки CORS, если я работаю с локального хоста, и как я могу устранить их в целях тестирования?

Вот метод в моем саге:

function* login(params){
    try {
        const api = new LoginApi();
        const response = yield call(api.login, params);
    } catch (error) {
        debugger;
        yield put({ type: types.ERROR_OCCURRED, error });
    }
}

Вот метод в объекте LoginApi, который вызывается из вызова yield:

login = async (loginProps) => {
    try {
        let api = axios.create({
            baseURL: 'http://localhost/5001',
            timeout: 100000
        });

        return await api.post(`/api/login`, loginProps);
    } catch (error) {
        debugger;
        throw error;
    }
}

Ответы [ 2 ]

0 голосов
/ 03 января 2019

Вы можете установить заголовок запроса (перекрестный источник) самостоятельно или использовать пакет CORS (npm i cors --save)

без использования пакета Cors ->

app.use((req, res, next) => {
    res.header('Access-Control-Allow-Origin', '*');
    if (req.method === 'OPTIONS') {
        var headers = {};
    // headers["Access-Control-Allow-Origin"] = req.headers.origin;
        headers["Access-Control-Allow-Origin"] = "*";
        headers["Access-Control-Allow-Methods"] = "POST, GET, PUT, DELETE, 
        OPTIONS";
        headers["Access-Control-Allow-Credentials"] = false;
        headers["Access-Control-Max-Age"] = '86400'; // 24 hours
        res.writeHead(200, headers);
       res.end();
    } else {
        next();
    }
});

Если вы используете cors (npm i cors --save)

const cors = require('cors') app.use(cors());

для получения дополнительной cors конфигурации пакета, просто обратитесь https://github.com/expressjs/cors

0 голосов
/ 03 января 2019

Сервер, получающий запрос, должен установить заголовки CORS, чтобы браузер знал, что сервер ожидает запросы вне своего домена.Вы всегда можете установить их вручную, но если вы используете экспресс, есть библиотека, которая делает это легко - https://expressjs.com/en/resources/middleware/cors.html. У большинства популярных инфраструктур узлов должен быть эквивалент.

...