Я пытаюсь поддерживать CORS в моем приложении Node.js, которое использует веб-инфраструктуру Express.js. Я прочитал обсуждение группы Google о том, как с этим справиться, и прочитал несколько статей о том, как работает CORS. Сначала я сделал это (код написан в синтаксисе CoffeeScript):
app.options "*", (req, res) ->
res.header 'Access-Control-Allow-Origin', '*'
res.header 'Access-Control-Allow-Credentials', true
# try: 'POST, GET, PUT, DELETE, OPTIONS'
res.header 'Access-Control-Allow-Methods', 'GET, OPTIONS'
# try: 'X-Requested-With, X-HTTP-Method-Override, Content-Type, Accept'
res.header 'Access-Control-Allow-Headers', 'Content-Type'
# ...
Это не похоже на работу. Похоже, мой браузер (Chrome) не отправляет начальный запрос OPTIONS. Когда я только что обновил блок для ресурса, мне нужно отправить перекрестный запрос GET по адресу:
app.get "/somethingelse", (req, res) ->
# ...
res.header 'Access-Control-Allow-Origin', '*'
res.header 'Access-Control-Allow-Credentials', true
res.header 'Access-Control-Allow-Methods', 'POST, GET, PUT, DELETE, OPTIONS'
res.header 'Access-Control-Allow-Headers', 'Content-Type'
# ...
Работает (в Chrome). Это также работает в Safari.
Я прочитал это ...
В браузере, реализующем CORS, каждому перекрестному запросу GET или POST предшествует запрос OPTIONS, который проверяет, в порядке ли GET или POST.
Итак, мой главный вопрос: почему этого не происходит в моем случае? Почему не вызывается мой блок app.options? Зачем мне устанавливать заголовки в моем главном блоке app.get?
источник
Ответы:
Чтобы ответить на ваш главный вопрос, спецификация CORS требует, чтобы вызов OPTIONS предшествовал POST или GET, если в POST или GET есть непростой контент или заголовки.
Типы контента, для которых требуется предполетный запрос CORS (вызов OPTIONS), - это любой тип контента, кроме следующих :
application/x-www-form-urlencoded
multipart/form-data
text/plain
Любые другие типы контента, кроме перечисленных выше, вызовут предполетный запрос.
Что касается Заголовков, любые Заголовки Запроса кроме следующего вызовут предполетный запрос:
Accept
Accept-Language
Content-Language
Content-Type
DPR
Save-Data
Viewport-Width
Width
Любые другие заголовки запроса активируют предполетный запрос.
Таким образом, вы можете добавить пользовательский заголовок, такой как:,
x-Trigger: CORS
и он должен вызвать предполетный запрос и попасть в блок OPTIONS.См. Справочник по MDN Web API - Предварительные запросы CORS.
источник
OPTIONS
блоки не отправляются. Было бы неплохо, если бы у него был список принятыхHEADERS
, или которыеcontent-types
требуютOPTIONS
, и т. Д., Но это хорошее началоЯ нашел самый простой способ заключается в использовании Node.js пакета CORS . Самое простое использование:
Есть, конечно, много способов настроить поведение в соответствии с вашими потребностями; на странице, указанной выше, приведено несколько примеров.
источник
cors({credentials: true, origin: true})
Попробуйте передать управление следующему подходящему маршруту. Если Express сначала совпадает с маршрутом app.get, он не продолжит движение по маршруту параметров, если вы не сделаете это (обратите внимание на использование next) :
Что касается организации CORS, я поместил ее в промежуточное ПО, которое хорошо работает для меня:
источник
config.allowedDomains
разделенные запятыми строки или массив?Чтобы остаться в той же идее маршрутизации. Я использую этот код:
Аналогично примеру http://enable-cors.org/server_expressjs.html
источник
делать
и просто добавьте эти строки в ваш основной файл, куда направляется ваш запрос (сохраните его перед любым маршрутом).
источник
app.options('*', cors())
// включить до других маршрутовЯ сделал более полное промежуточное программное обеспечение, подходящее для экспресс или подключения. Поддерживает
OPTIONS
запросы на предполетную проверку. Обратите внимание, что это разрешит CORS доступ ко всему, вы можете поставить некоторые проверки, если хотите ограничить доступ.источник
установить модуль Cors ExpressJS. Вы можете выполнить следующие действия>
Установка
Простое использование (включить все запросы CORS)
для получения более подробной информации перейдите на https://github.com/expressjs/cors
источник
TypeError: Cannot read property 'headers' of undefined
Самая базовая настройка приложения.Сделайте что-то вроде этого:
источник
Тестирование выполнено с экспресс + узел + ионный работает в разных портах.
Localhost:8100
Localhost:5000
источник
Сначала просто установите Cors в вашем проекте. Возьмите терминал (командную строку) и
cd
перейдите в каталог вашего проекта и выполните следующую команду:Затем возьмите файл server.js и измените код, добавив в него следующее:
Это сработало для меня ..
источник
cors
если вы делаетеres.header
вещи.cors
это библиотека, которая обрабатывает все это для вас. Удалите свою первую и третью строки (AKA все, с чемcors
), и вы обнаружите, что он все еще работает.res.header("Access-Control-Allow-Origin", "*");
Это работает для меня, так как это простая реализация внутри маршрутов, я использую Meanjs и его работает нормально, Safari, Chrome и т. Д.
источник
Некоторое время назад я столкнулся с этой проблемой, поэтому я сделал это, чтобы включить CORS в моем приложении nodejs:
Сначала вам нужно установить
cors
с помощью команды ниже:Теперь добавьте следующий код в стартовый файл вашего приложения, например (
app.js or server.js
)источник
По моему
index.js
я добавил:источник
Access-Control-Allow-Origin = *
означает, что вы не сможете отправлять Cookies на сервер, они будут отклонены Политикой CORS - источник: developer.mozilla.org/en-US/docs/Web/HTTP/… . Так что не используйте это, если вы хотите использовать куки.Если вы хотите сделать его специфичным для контроллера, вы можете использовать:
Пожалуйста, обратите внимание, что это также позволит использовать iframes.
источник
Можете сослаться на код ниже для того же. Источник: Academind / node-restful-api
источник
const app = express();
и работает! Я думаю, что важно упомянуть об этом.Мое простейшее решение с Express 4.2.0 (EDIT: кажется, не работает в 4.3.0) было:
Я полагаю,
app.all('/result', ...)
что работа будет работать тоже ...источник
Самый простой ответ - просто использовать пакет cors .
Это позволит CORS по всем направлениям. Если вы хотите узнать, как включить CORS без внешних модулей , все, что вам действительно нужно, это некоторое промежуточное программное обеспечение Express, которое устанавливает заголовок «Access-Control-Allow-Origin» . Это минимум, который вам нужен, чтобы разрешить кросс-запросы доменов из браузера на ваш сервер.
источник
Использование Express Middleware прекрасно работает для меня. Если вы уже используете Express, просто добавьте следующие правила промежуточного программного обеспечения. Это должно начать работать.
Ссылка
источник
Ниже работал для меня, надеюсь, это поможет кому-то!
Получил ссылку с https://expressjs.com/en/resources/middleware/cors.html#configuring-cors
источник
Я обнаружил, что это очень легко сделать с помощью пакета запросов npm ( https://www.npmjs.com/package/request )
Тогда я основал свое решение на этом посте http://blog.javascripting.com/2015/01/17/dont-hassle-with-cors/
источник
В машинописи, если вы хотите использовать node.js пакет CORS
Если вы не хотите использовать библиотеки третьей части для обработки ошибок cors, вам нужно изменить метод handleCORSErrors ().
Для использования файла app.ts
источник
Это похоже на ответ Пата с той разницей, что я заканчиваю с res.sendStatus (200); вместо следующего ();
Код будет перехватывать все запросы типа метода OPTIONS и отправлять обратно заголовки контроля доступа.
Код принимает CORS из всех источников в соответствии с запросом в вопросе. Однако было бы лучше заменить * на конкретное происхождение, то есть http: // localhost: 8080, чтобы предотвратить неправильное использование.
Поскольку мы используем метод app.options вместо метода app.use, нам не нужно выполнять эту проверку:
который мы можем увидеть в некоторых других ответах.
Я нашел ответ здесь: http://johnzhang.io/options-request-in-express .
источник
Вы можете использовать промежуточное программное обеспечение Express, заблокировать домен и методы.
источник
Мы можем избежать CORS и перенаправить запросы на другой сервер:
источник
Я использовал следующие шаги для моего веб-приложения, и у меня был успех:
Добавьте пакет Cors в экспресс:
Добавьте следующие строки после конфигурации bodyParser . У меня были некоторые проблемы с добавлением до bodyParser:
источник
Самый простой подход - установить модуль Cors в ваш проект, используя:
Затем в файл вашего сервера импортируйте его, используя следующее:
Затем просто используйте его в качестве промежуточного ПО, например:
Надеюсь это поможет!
источник
Если бы я был тобой @OP, я бы изменил свою парадигму программирования.
при условии, что вы блокируете эти CORS, потому что вы делаете запросы к localhost или что-то подобное.
В конце концов, если вы собираетесь развернуть в производственных оптоинах, таких как
Google Cloud Platform
илиHeroku
или, вам не нужно будет беспокоиться о CORS, например, разрешить отправку или что- то еще, когда вы находитесь в производстве.поэтому при тестировании сервера просто используйте,
postman
и вы не заблокируете CORS, после этого разверните свой сервер и затем работайте на своем клиенте.источник
/ * во-первых, и это может быть проблемой среди младших разработчиков, таких как я: убедитесь, что вы используете "lambda" >>>> "` ", а не" '"в вашей выборке методе ! * /
`` `const response = await fetch (
https://api....
);/ plus, настоятельно рекомендуется следующая статья: https://developer.edamam.com/api/faq /
источник
просто тяжело
источник
Попробуйте это в вашем основном файле js:
Это должно решить вашу проблему
источник