我正在尝试使用其 api 查询 VoltDB:
const url = 'http://server:8080/api/1.0/'
const queryParam = encodeURIComponent('select * from table')
const queryURL = url + `?Procedure=@AdHoc&Parameters=['${queryParam}']&jsonp=console.log`
fetch(queryURL).then( response => {
response.text().then( text => console.log(text) )
})
使用该代码会引发“No Access-Control-Allow-Origin”错误。 如果我将 fetch 调用更改为:
fetch(queryURL, { mode: 'no-cors').then( response => {
response.text().then( text => console.log(text) )
})
什么都不做
最佳答案
这是一项浏览器安全功能。如果您从一个 URL 提供网页,并且在该页面中嵌入了对另一主机或端口的 URL 调用,则浏览器将不允许这样做。
解决此问题的一种方法是向 Web 服务器添加代理,这样它就可以调用端口 8080,并将响应从同一源传递回网页。
您可能会在 Stack Overflow 上看到一些关于使用 CORS 来解决此错误的答案,但这需要更改 VoltDB 在端口 8080 上使用的 header ,因此您无法自行完成此操作,而且我们没有计划这样做.
另一个解决方案是使用我们的一些演示中提供的 voltdb.js 文件,例如 NBBO 演示仪表板:https://github.com/VoltDB/voltdb/tree/master/examples/nbbo/web
我认为这使用低级 javascript 打开套接字来进行 HTTP 调用,而不使用 XMLHttpRequest,因此它避免了 No Access-Control-Allow-Origin 错误。
在示例中,特定于 NBBO 示例的代码位于 demo.js 中,voltdb-dashboard.js 包含各种示例仪表板通用的代码,并且 voltdb.js 是提供调用访问权限的基础库异步过程。
关于Javascript - 使用 fetch 查询 VoltDB api,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40348461/