微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

尝试解决错误:使用网站或邮递员访问本地主机数据库和 API 端点时的 SASL

如何解决尝试解决错误:使用网站或邮递员访问本地主机数据库和 API 端点时的 SASL

我有一个托管在 pgAdmin 上的 Postgres 数据库我有一个带有 POST 和 GET 路由的 API。另外,我有设置和填充数据库的测试文件。所有这一切似乎都运行良好。当我运行测试时,它会使用我的测试中的项目构建数据库。这一切都在本地主机上完成。

但是,当我尝试使用 Postman 发出请求时,我在终端中收到此错误

错误:SASL:SCRAM-SERVER-FirsT-MESSAGE:客户端密码必须是字符串

[nodemon] starting `node server.js`
Started on port 3001
/Users/francoortega/Documents/Professional/Projects/Practice/Server/demo-server-02-api-database/node_modules/pg/lib/sasl.js:24
    throw new Error('SASL: SCRAM-SERVER-FirsT-MESSAGE: client password must be a string')
    ^

Error: SASL: SCRAM-SERVER-FirsT-MESSAGE: client password must be a string
    at Object.continueSession (/Users/francoortega/Documents/Professional/Projects/Practice/Server/demo-server-02-api-database/node_modules/pg/lib/sasl.js:24:11)
    at Client._handleAuthSASLContinue (/Users/francoortega/Documents/Professional/Projects/Practice/Server/demo-server-02-api-database/node_modules/pg/lib/client.js:257:10)
    at Connection.emit (node:events:394:28)
    at /Users/francoortega/Documents/Professional/Projects/Practice/Server/demo-server-02-api-database/node_modules/pg/lib/connection.js:114:12
    at Parser.parse (/Users/francoortega/Documents/Professional/Projects/Practice/Server/demo-server-02-api-database/node_modules/pg-protocol/dist/parser.js:40:17)
    at Socket.<anonymous> (/Users/francoortega/Documents/Professional/Projects/Practice/Server/demo-server-02-api-database/node_modules/pg-protocol/dist/index.js:11:42)
    at Socket.emit (node:events:394:28)
    at addChunk (node:internal/streams/readable:312:12)
    at readableAddChunk (node:internal/streams/readable:287:9)
    at Socket.Readable.push (node:internal/streams/readable:226:10)
[nodemon] app crashed - waiting for file changes before starting...

我猜在这种情况下 Postman 是客户端,所以我是否需要在通过 Postman 发送的请求中包含我的 Postgres 用户名和密码?我尝试将它们包含在 Basic Auth 下的 Authorization 字段中,但这没有任何区别。

编辑/UDPATE:我在本地主机上构建了一个客户端(网站)以连接到本地主机上的数据库,它与邮递员有同样的问题。长话短说,我必须实时启动我的数据库(我使用了 Heroku/Postgres/pgAdmin),然后 Postman 和我的 localhost 客户端都能够连接到实时数据库。但是当数据库设置为localhost时,他们仍然无法连接到数据库

此时我想知道的是:有没有办法将本地主机或实时客户端(网站、邮递员等)连接到本地主机数据库?似乎应该有一种方法可以在我的本地机器上一起测试它们,而不必实时启动数据库

解决方法

我刚刚从朋友那里得到了修复帮助。至少临时修复。我将此行添加到 pool.js 文件的顶部:

import dotenv from 'dotenv/config';

问题似乎是没有从 pool.js 文件访问环境变量 (process.env.SECRET_STUFF)。现在我可以从我的本地前端和 Postman 连接到我的本地数据库。

虽然,我的朋友也说更好的解决方案是将 'dotenv/config' 添加到 package.json 文件中的脚本中,但他不确定正确的语法是什么,所以我接下来将尝试找出答案。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。