根据本教程,我在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实例。尝试执行以下操作:
- 你的连接字符串应该是
postgresql://root@localhost:26257/defaultdb?sslmode=disable&options=--cluster%3Droach1
如果您想使用新创建的Db用户,请使用:
postgresql://ncado:root@localhost:26257/defaultdb?sslmode=disable&options=--cluster%3Droach1
ncado
为用户名root
为密码
我认为在示例中他们将ssl设置为- sslmode=verify-full。您将无法使用ssl,因为您没有配置任何证书。设置leave it Set为
disable
端口8080是具有蟑螂管理仪表板的web界面,您将无法连接到该端口进行查询。26257是监听TCP连接的地方,所以你的pg客户端应该连接到那个端口。
您看到的错误只是意味着没有带有roach1的DNS条目。在Docker网络内,DNS可以解析这个地址,在外部则不能。
尝试res.end()代替res.send()