Javascript - 使用 fetch 查询 VoltDB api

标签 javascript voltdb

我正在尝试使用其 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/

相关文章:

JavaScript 中的 PHP 值

javascript - 追加/添加到容器

javascript - jquery - 在插入符号位置插入元素

javascript - 显示递归请求的进度

javascript - Bower 仅下载 Bower.json 但没有真正的依赖文件

hadoop - 带有 NOSQL/Hadoop 的企业数据仓库 - "NO RDBMS"

mysql - 有VoltDB或MySQL集群真实体验的人吗?

java - 什么是 zookeeper 端口及其用途?

python - 从 Python 访问 VoltDB

java - 使用 jdbc 在 volt-db 中创建表