axios删除呼叫返回405

时间:2018-08-24 21:23:22

标签: javascript reactjs axios tornado

我们正在后台运行Tornado服务,该服务接受来自React应用程序的发布和删除调用。

我们的 axios.post调用工作正常,但在我们的删除请求中失败,并显示以下错误消息

405(不允许使用方法)

对预检请求的响应未通过访问控制检查:所请求的资源上不存在“ Access-Control-Allow-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 :(得分:0)

您可以做的是,在您的API请求中允许使用cors: 像这样:

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

您可以以此为例,并在您的删除请求中添加crossdomain:true。 让我知道cors错误是否仍然存在。

答案 1 :(得分:0)

这是CORS问题。如错误所指示,DELETE操作尚未被允许。 Here的解释是,您必须将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)

可以从具有所有标头的所有来源发出请求,并且允许使用OPTIONSPOSTDELETE方法。

答案 2 :(得分:0)

对于taken请求,有一个名为CORS的软件包。您可以通过将其安装为

来尝试
cors

然后您就可以要求它并将其用作示例的中间件

npm install cors --save

有关cors npm软件包here

的更多信息