1 javascript xmlhttprequest node.js cors express
我的项目在具有Express后端的Node上运行。
我正在尝试使用Arangojs查询我的Arango数据库客户端。ArangoDB在Digital Ocean上的Docker上运行。查询数据库服务器端没有问题,但是页面加载时出现以下错误:
无法加载 http://0.0.0.0:8529/_db/database/_api/cursor:对预检请求的响应未通过访问控制检查:响应中“ Access-Control-Allow-Credentials”标头的值为'false',当请求的凭据模式为'include'时必须为'true'。因此,不允许访问源' http:// localhost:3000 '。XMLHttpRequest发起的请求的凭据模式由withCredentials属性控制。
我在客户端js上的代码如下所示:
var db = new arangojs.Database({url:'http://0.0.0.0:8529'})
db.useDatabase(dbase)
db.useBasicAuth("database", 'password')
db.query('FOR doc IN docs RETURN doc') // etc. etc.
Run Code Online (Sandbox Code Playgroud)
编辑: 1年后事后看来,这个问题很傻-正确的答案是不要通过客户端JS公开您的数据库凭据...与您的后端进行通信,并与您的数据存储区进行通信。
您配置cors()
错误,必须使用credentials
属性才能配置Access-Control-Allow-Credentials:
var cors = require('cors');
var corsOptions = {
origin: '*',
credentials: true };
app.use(cors(corsOptions));
Run Code Online (Sandbox Code Playgroud)
除此之外,您app.all(* ...
不是必需的,因为app.use(cors(corsOptions));
已经为您处理了。
小智 5
您必须使用“受信任的”URL 或一组“受信任的”URL 设置 origin,当您使用凭据配置 cors 时,每个 URL 都带有协议 + 域 + 端口。origin : '*' 被阻止,因为对每个来源使用凭据过于宽松。这就像根本不使用凭据。