当前位置: 首页 > 面试题库 >

使用Polymer iron-ajax和Node.js发出CORS请求

慕弘义
2023-03-14
问题内容

我正在尝试使用Polymer和Node检索数据,但正努力获得有效的响应。我收到起飞前响应错误,提示access-control-allow- origin不允许。

我在上运行Polymer,在上运行localhost:4001Node 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请求。

为确保正确处理CORS飞行前检查,请考虑安装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
包含所有选项的更多详细信息。



 类似资料:
  • 问题内容: 这是根据提供的示例验证geoJSON的代码: 我正在尝试使用以下代码进行验证: 在此,我提出实际要求: 我在Chrome控制台中收到此错误: 标题 这是与请求相关的数据: 问题答案: 您不应该将其设置为请求标头,而是响应标头。 您可以从响应中看到服务器将接受哪些请求标头: 错误消息告诉您: 似乎也可能不接受。

  • 问题内容: 我正在做一个ribs.js项目,我在叫我的github仓库。我已经引导了我的Collections和Models,因此一旦构建页面,它们就会存在,但是当我调用model.fetch()时,我收到以下消息:(用用户名替换:username) 我已经读了几则消息post1,post2,它们提到了修改ribs.sync函数,但我不完全确定该怎么做。到目前为止,这是我的代码(这在我的Backb

  • 问题内容: 我正在尝试通过javascript发布到我的 跨域 * 休息服务 *,并且意识到除非我使用此规范,否则这是不可能的; http://www.w3.org/wiki/CORS_Enabled 但是,关于如何实现此功能的文档非常有限,我有几个问题; 1-我使用 Glassfish Jee6 应用服务器,所以我可以简单地在我的web.xml中添加一个 码头 过滤器并完成工作吗? 2-并且对于

  • 问题内容: 我试图在带有Razor的MVC 4中使用$ .ajax发出AJAX请求。我不确定如何实现它。 使用此视频,我能够成功进行返回数据的链接驱动的调用,但是我似乎无法在jquery函数中执行相同的操作。我似乎找不到如何执行此操作的任何基本示例。这就是我正在使用的: HomeController.cs View.cshtml 问题答案: 您只需要使其成为一个。另外,如果您使用的是Ajax PO

  • 问题内容: 我在处理ajax请求时遇到麻烦。我遇到了错误 所以我尝试的是这个jQuery ajax请求: 但是它仍然无法正常工作。我仍然遇到错误。 我该如何解决? 问题答案: 这很容易,您应该首先设置服务器http响应标头。 问题不在于您的前端javascript代码。 您需要返回此标头: 要么 在Apache配置文件中,代码如下: 在nodejs中,代码是这样的:

  • 我正在尝试使用ajax发送post请求,但始终出现以下错误: XMLHttpRequest无法加载http://192.168.1.123:8080。对预检请求的响应无法通过权限改造检查:请求的资源上不存在“访问控制允许源”标头。因此不允许访问源“http://localhost:8080”。 这是我的代码