Угловой POST-запрос был заблокирован политикой CORS: ответ на предполётный запрос не проходит проверку контроля доступа - PullRequest
0 голосов
/ 23 сентября 2019

Я уже установил cors на бэкэнд, я просто не знаю, почему я получаю ошибку 404, когда URL-адрес правильный.Ошибка: Доступ к XMLHttpRequest в «http://localhost:3008/api/vehicle' от источника» http://localhost:3007' заблокирован политикой CORS: Ответ на предпечатный запрос не проходит проверку контроля доступа: не имеет статуса HTTP ok.Я также добавил свой кросс-домен API ниже.пожалуйста, проверьте пример кода ниже. Каково было бы решение этой проблемы?что вызывает эту проблему? Я уже установил cors на бэкэнд, я просто не знаю, почему я получаю ошибку 404, когда URL-адрес правильный.Ошибка: Доступ к XMLHttpRequest в «http://localhost:3008/api/vehicle' от источника» http://localhost:3007' заблокирован политикой CORS: Ответ на предпечатный запрос не проходит проверку контроля доступа: не имеет статуса HTTP ok.Я также добавил свой кросс-домен API ниже.пожалуйста, проверьте пример кода ниже. Каково было бы решение этой проблемы?что вызывает эту проблему?

Есть идеи?

Http post service

save(vehicle: Vehicle){

    return this.http.post(

        CONSTANST.routes.person.save,
        {
            Stock: vehicle.Stock,
            VIN: vehicle.VIN,
            age: vehicle.age,
            gender: vehicle.gender,
        },                
    );
}

маршруты

const HOST ='http://localhost:3008'

export const CONSTANST = {
    permissions:{},
    routes:{
        authorization:{
            login: HOST + '/api/app/signin-email',
            logout: HOST + '/api/auth/logout'
        },
        person:{
            list: HOST + '/api/vehicle',
            save: HOST + '/api/vehicle',
        },
        user: {}
    },
    lang:{},
    session:{},
    parameters:{}
};

API междоменный запрос

if (process.env.NODE_ENV !== 'production') {
    console.log('------------------------------------------------');
    console.log('Notice: Enabling CORS for development.');
    console.log('------------------------------------------------');
    app.all('*', function (req, res, next) {
        res.header('Access-Control-Allow-Origin', '*');
        res.header('Access-Control-Allow-Methods', 'GET, POST');
        res.header('Access-Control-Allow-Headers', 'Content-Type');
        next();
    });
}

API-маршруты

app.get('/api/vehicle',  keystone.middleware.api, routes.api.vehicle.list);
    app.post('/api/vehicle',  keystone.middleware.api ,routes.api.vehicle.create);

1 Ответ

0 голосов
/ 23 сентября 2019

В вашем случае URL-адрес может быть правильным, но у вас нет настроенного обработчика для метода запросов «OPTIONS» в ваших маршрутах API.Он должен быть настроен так, как вы делаете это для запросов GET или POST.И в результате вы получаете 404 ответа на ваши предварительные запросы.

app.options('/api/vehicle',  keystone.middleware.api ,routes.api.vehicle.create);

Но вам не нужно передавать туда свой обратный вызов с логикой, потому что вы будете выполнять свою логику дважды.

Кроме того, я могу посоветовать вам сделать один обработчик опций для всех ваших маршрутов:

app.options('*', someSimpleCallback);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...