Axios Удалить вызов возвращает 405 - PullRequest
0 голосов
/ 25 августа 2018

Мы работаем в фоновом режиме с сервисом Tornado, который принимает звонки и удаляет звонки из приложения React.

Наш вызов axios.post прекрасно работает , но он не выполняется в нашем запросе на удаление со следующим сообщением об ошибке

405 (Метод не разрешен)

Ответ на предварительный запрос не проходит проверку контроля доступа: в запрашиваемом ресурсе отсутствует заголовок «Access-Control-Allow-Origin».Origin 'http://localhost:3000', следовательно, не разрешен доступ.

export const StopBuild = (action$) =>
  action$.ofType(STOPBUILD)
    .mergeMap((action) => {
      return Observable.fromPromise(axios.delete(action.stopRequest))
        .map(response => PlatformBuildSuccess(response))
        .catch(error => Observable.of(PlatformBuildFailure(error, action.platform)))
    })

Со стороны сервера это то, что мы сейчас установили,

    self.set_header("Content-Type", "*")
    self.set_header("Access-Control-Allow-Origin", "*")
    self.set_header("Access-Control-Allow-Headers", "*")
    self.set_header('Access-Control-Allow-Methods', 'POST, GET, OPTIONS, PUT, DELETE')

Что-то еще, что мызаметил, что когда на стороне сервера мы устанавливаем только следующий заголовок POST, вызов все еще работает.Я думаю, что мы идем не так на стороне сервера.

self.set_header("Access-Control-Allow-Origin", "*")

Буду признателен за любую помощь.

Ответы [ 3 ]

0 голосов
/ 25 августа 2018

Это проблема CORS.Как говорится в ошибке, операция DELETE пока не разрешена. Здесь объясняется, что вы должны добавить метод DELETE в заголовок ответа Access-Control-Allow-Methods запроса предварительной проверки.

На стороне сервера, используя nodejs, чтобы CORS выглядело так:

const corsMiddleware = (req, res, next) => {
  res.header('Access-Control-Allow-Origin', '*')
  res.header('Access-Control-Allow-Headers', '*')
  res.header('Access-Control-Allow-Methods', 'OPTIONS, POST, DELETE')
  next()
}

app.use(corsMiddleware)

Запрос может быть сделан из любого источника со всеми заголовками; допускаются методы OPTIONS, POST и DELETE.

0 голосов
/ 25 августа 2018

Для запроса CORS доступен один пакет под названием cors. Вы можете попробовать это, установив его как

npm install cors --save

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

const express = require('express');
const cors = require('cors');
const app = express();

app.use(cors());

Подробнее о пакете cors npm здесь

0 голосов
/ 25 августа 2018

Что вы можете сделать, это разрешить cors в вашем запросе API: Как это:

axios.delete(url, { crossdomain: true }) // an example

Вы можете взять это в качестве примера и добавить crossdomain:true в запрос на удаление. дайте мне знать, если ошибка по-прежнему сохраняется.

...