使用Polymer iron-ajax和Node.js进行CORS请求

时间:2018-01-07 00:41:00

标签: ajax express cors polymer

我正在尝试使用Polymer和Node检索数据,但我很难获得有效的响应。我收到一个飞行前响应错误,指出access-control-allow-origin是不允许的。

我在localhost:4001上运行Polymer,在localhost:8080上运行Node。

如何配置节点或客户端以加载响应?

客户端

<iron-ajax id="ajaxUser"
  url="http://localhost:8080/node/api/mssql/login"
  method="post"
  handle-as="json"
  Content-Type="application/json"
  headers='{"Access-Control-Allow-Origin": "*"}'
  params="[[params]]"
  on-response="saveUserCredentials"
  last-response="{{user}}"></iron-ajax>

节点

const corsOptions = {
  allowedHeaders: ['Content-Type', 'Access-Control-Allow-Origin']
}

app.options('*', cors(corsOptions))

...

app.use((req, res, next) => { // Enable Cross-Origin Resource Sharing (CORS)
  res.header("Access-Control-Allow-Origin", "*")
  res.header("Access-Control-Allow-Methods", "GET,HEAD,OPTIONS,POST,PUT")
  res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Authorization, x-api-key")
  next()
})

错误

  

无法加载
  http://localhost:8080/login?username=user&password=password
  请求的资源上没有“Access-Control-Allow-Origin”标头   因此,不允许原点“http://localhost:4001”访问。   响应的HTTP状态代码为400.

1 个答案:

答案 0 :(得分:1)

问题代码段中的节点配置无法处理OPTIONS次请求。

为确保正确处理CORS preflights,请考虑安装npm cors包:

npm install cors

然后做这样的事情:

var express = require('express')
  , cors = require('cors')
  , app = express();
app.options('*', cors()); // preflight OPTIONS; put before other routes

这将处理预检响应和其他CORS方面,而无需在应用程序代码中从头开始手动编写自己的处理。

https://www.npmjs.com/package/cors#configuration-option详细了解所有选项。