Запросы предполетной подготовки (ОПЦИИ) не выполняются для проекта локального парообразования

Я создал базовый бэкэнд, написанный на Swift, с использованием фреймворка Vapor. Я запускаю его локально на своей машине, поэтому к нему можно получить доступ по адресу http://localhost:8080.
Для проекта, над которым я работаю, я также создаю интерфейс, который построен с использованием ReactJS и доступен по адресу http://localhost:3000.

При вызове моего бэкэнда в Postman со следующей информацией запрос работает нормально, и пользователь создается в базе данных:

Метод
POST на пользователя

Заголовки
Content-Type: application / json Accept: application / json

Тело

{
    email: "[email protected]
    password: "12345"
}

Теперь, при вызове того же метода с тем же телом и заголовками из локального интерфейса, мой запрос немедленно завершается ошибкой без какого-либо ответа:

неудавшийся ответ

Когда я проверяю ответ, я вижу, что все тело и заголовки были отправлены правильно, но ответа не было.
Я немного погуглил и понял, что Postman (и аналогичные) ведут себя иначе, чем браузеры, и что я должен проверить, работает ли метод работает с OPTIONS вместо POST. Я снова вызвал этот метод: OPTIONS /user, и он также потерпел неудачу в Postman:

невыполненный вызов опций

Единственная разница в том, что в Postman я получаю ответ «Результат не найден», как вы можете видеть на снимке экрана.

Я подумал, что это может иметь какое-то отношение к localhost в URL-адресе вызова API, поскольку интерфейс также работает на localhost. Поэтому я использовал ngrok для перенаправления моего порта 8080 (бэкэнд), а затем назвал URL-адрес *.ngrok.io вместо localhost:8080. Не повезло.
Я также пробовал использовать сетевой IP-адрес моей машины вместо localhost. По-прежнему не повезло.

Что я могу с этим поделать?


person LinusGeffarth    schedule 22.01.2020    source источник
comment
Параметры предпечатного запроса обычно отправляются, чтобы проверить, разрешены ли кросс-доменные запросы (CORS), включены ли они на вашем сервере?   -  person lazizanie    schedule 22.01.2020
comment
@lazizanie см. мой обновленный пост   -  person LinusGeffarth    schedule 22.01.2020
comment
попробуйте let corsConfiguration = CORSMiddleware.Configuration (allowedOrigin: .all, allowedMethods: .all, allowedHeaders: .all)   -  person lazizanie    schedule 22.01.2020


Ответы (1)


Если вы сконфигурируете параметры CORS своего бэкэнда следующим образом, он должен работать:

Пар 4

let corsConfiguration = CORSMiddleware.Configuration(
    allowedOrigin: .all,
    allowedMethods: [.GET, .POST, .PUT, .OPTIONS, .DELETE, .PATCH],
    allowedHeaders: [.accept, .authorization, .contentType, .origin, .xRequestedWith, .userAgent, .accessControlAllowOrigin]
)
app.middleware.use(CORSMiddleware(configuration: corsConfiguration))


Пар 3

let corsConfiguration = CORSMiddleware.Configuration(
    allowedOrigin: .all,
    allowedMethods: [.GET, .POST, .PUT, .OPTIONS, .DELETE, .PATCH],
    allowedHeaders: [.accept, .authorization, .contentType, .origin, .xRequestedWith, .userAgent, .accessControlAllowOrigin]
)
middlewares.use(CORSMiddleware(configuration: corsConfiguration))
services.register(middlewares)
person cweinberger    schedule 22.01.2020