Angular 4: нет «Access-Control-Allow-Origin», но только с почтовыми запросами

1

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

Я новичок в угловом 4, и я пытаюсь создать простую службу создания/обновления/удаления с использованием внешнего пользовательского API.

Сначала у меня были проблемы с CORS, но это было исправлено установкой заголовка "Access-Control-Allow-Origin" на стороне сервера api.

Теперь мои запросы GET/PATCH и DELETE работают нормально, но мой "POST" все еще ловит ошибку.

А вот "странная" часть.

Когда я просматриваю вкладку "сеть" в инструментах разработки Google Chrome, я вижу как "ОПЦИИ", так и запрос "POST" (как должен делать угловой), но только "ОПЦИИ" имеет "Access-Control-Allow- Происхождение: http://localhost: 3003 "в заголовках ответов.

Однако оба отправляют код ответа "200". (Вот несколько скриншотов)

Почему бы пост-перерыв, если другие работали нормально?

Вот некоторые примеры кода из моей службы:

private headers = new Headers({'Content-Type': 'application/json'});

// works
update(id: number, fields: any): Promise<Tag> {
    const url = '${this.tagsUrl}/${id}';
    return this.http
        .patch(url, JSON.stringify(fields), {headers: this.headers})
        .toPromise()
        .then(res => res.json())
        .catch(this.handleError);
}

// doesn't work
create(tagName: string, tagType: number): Promise<any> {
    return this.http
        .post(this.tagsUrl, JSON.stringify({name: tagName, tagType: tagType}), {headers: this.headers})
        .toPromise()
        .then(res => res.json())
        .catch(this.handleError);
}

Заранее благодарим за любую помощь, которую вы можете принести!

Майкл

  • 2
    Это не проблема, связанная с Angular. Это бэкэнд, который делает что-то не так. Я бы порекомендовал запустить Angular на том же хосте, что и ваш бэкэнд. Так что пропустите предпечатную проверку, это может стать болью.
  • 0
    Понимаю. Я постараюсь найти решение с человеком, отвечающим за бэкэнд. Но почему проблема возникает только с «постом», а не любым другим методом?
Показать ещё 1 комментарий
Теги:
angular
cors

1 ответ

1
Лучший ответ

Наконец я нашел, откуда эта проблема.

Это произошло из конфигурации моего локального сервера. Мне пришлось раскомментировать эту строку с моего php.ini:

always_populate_raw_post_data = -1

Теперь он работает по назначению.

Спасибо за помощь.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню