我如何使用NodeJs将代码连接到我的本地cockroachdb集群?



根据本教程,我在docker中创建了一个具有三个节点的本地cockroachdb集群:

https://www.cockroachlabs.com/docs/v21.2/start-a-local-cluster-in-docker-windows

现在我尝试连接到这个postgresSQL

const { Client } = require('pg')
const client = new Client('postgresql://root@roach1:26257?sslmode=disable')
client.connect()

我已经通过控制台创建了一个新的DB用户,命名为"并设置"root"作为密码从这个模板创建连接字符串:

https://www.cockroachlabs.com/docs/stable/connect-to-the-database.html

const { Client } = require('pg')
const client = new Client('postgresql://ncado:root@localhost:8080/messages.message?sslmode=verify-full&options=--cluster%3Droach1')
client.connect()

如果我尝试更改端口26257,代码抛出错误

node:internal/process/promises:279
triggerUncaughtException(err, true /* fromPromise */);
^
Error: getaddrinfo ENOTFOUND roach1
at GetAddrInfoReqWrap.onlookup [as oncomplete] (node:dns:72:26) {
errno: -3008,
code: 'ENOTFOUND',
syscall: 'getaddrinfo',
hostname: 'roach1'
}

我一直在测试我的连接以下代码:

app.post('/test', async (req,res)=>{
const text = 'INSERT INTO messages.public.messag VALUES($1, $2,$3) RETURNING *'
const values = [4, 'berserk',"HAI YAI FOOOORCES"]
await client.query(text, values)
res.send('done')

})

当我向那个端点发出请求时,开始无休止地发送请求

假设您在docker中以集群模式运行了3个cockroachdb实例。尝试执行以下操作:

  1. 你的连接字符串应该是
postgresql://root@localhost:26257/defaultdb?sslmode=disable&options=--cluster%3Droach1

如果您想使用新创建的Db用户,请使用:

postgresql://ncado:root@localhost:26257/defaultdb?sslmode=disable&options=--cluster%3Droach1

ncado为用户名root为密码

  1. 我认为在示例中他们将ssl设置为- sslmode=verify-full。您将无法使用ssl,因为您没有配置任何证书。设置leave it Set为disable

  2. 端口8080是具有蟑螂管理仪表板的web界面,您将无法连接到该端口进行查询。26257是监听TCP连接的地方,所以你的pg客户端应该连接到那个端口。

  3. 您看到的错误只是意味着没有带有roach1的DNS条目。在Docker网络内,DNS可以解析这个地址,在外部则不能。

  4. 尝试res.end()代替res.send()

最新更新