我正在尝试使用Polymer和Node检索数据,但正努力获得有效的响应。我收到起飞前响应错误,提示access-control-allow- origin不允许。
access-control-allow- origin
我在上运行Polymer,在上运行localhost:4001Node localhost:8080。
localhost:4001
localhost:8080
如何配置节点或客户端以加载响应?
客户
<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。
问题中的代码片段中的Node配置无法处理OPTIONS请求。
OPTIONS
为确保正确处理CORS飞行前检查,请考虑安装npm cors软件包:
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包含所有选项的更多详细信息。