查询数据存储模拟器时如何强制@google-cloud/datastore 使用'http'

How can you force @google-cloud/datastore to use 'http' when you query your datastore emulator

我有一个节点 + vuejs 应用程序,我试图从中查询我的本地数据库(使用数据存储模拟器创建)。

我的代码是这样的

const { Datastore } = require('@google-cloud/datastore')
const datastore = new Datastore({
        apiEndpoint: "http://localhost:<port>",
        projectId: <my_project_name>
      })

然后我尝试 运行 Google 的 documentation

上的示例查询之一

我的输出显示连接成功,但随后我在控制台中收到以下错误

POST https://localhost:<port>/$rpc/google.datastore.v1.Datastore/RunQuery net::ERR_SSL_PROTOCOL_ERROR

从错误中,我看到它已将 http://localhost:<port> 更改为 https://localhost:<port> 即它正在为我的本地主机强制使用 https 协议,但显然失败了。

我是否必须指定 something/option 以确保它在我进行本地调用或使用数据存储模拟器时使用 http

我找到了解决方案并将其发布以防其他人遇到问题。

我开始检查代码本身并发现了对此 link 的引用。页面显示

.....默认情况下,客户端库将使用 gRPC,它是基于 HTTP/2 的二进制传输。它是 Node.js 实现,@grpc/grpc-js,使用 Node.js http2 模块。 如果您需要在非 Node.js 环境中使用客户端库,或者当 gRPC 因任何原因无法使用时,您可以使用 HTTP/1 回退模式。在这种模式下,使用一种特殊的浏览器兼容的传输实现来代替 gRPC 传输。 在浏览器上下文中(如果定义了 window 对象)自动启用回退模式;如果需要覆盖此行为,请将 options.fallback 设置为 false...

当我在选项中添加 fallback:false 时,一切正常,即它不再重定向到 https 并连接到我的数据模拟器。

我进一步考虑了一下,我相信这种行为是因为我的代码是在 renderer process 中为 Vuejs 应用程序编写的,这意味着有一个 windows 对象。为了确认,我将代码移到了 main process 并且没有包含 fallback 选项并且它起作用了。