Node-RED中MongoDB无认证连接失败问题求助
从你的日志里能揪出关键问题:Node-RED生成的连接串是mongodb://undefined:undefined@localhost:27017/cryptoboard——这说明MongoDB节点在没配置用户名密码的情况下,还是硬往连接串里塞了空的认证信息,导致MongoDB触发了认证流程(但你的库根本没设置用户),所以才会弹出Authentication failed的错误。
下面是几个针对性的解决思路:
彻底清空MongoDB节点的用户名/密码字段
打开Node-RED的MongoDB节点配置界面,确保用户名和密码输入框是完全空白的(别留空格或者默认占位符)。有些老版本的节点会把空字段解析成undefined并拼进连接串,清空后应该能生成不带认证信息的正确连接串。直接使用自定义连接字符串
多数MongoDB节点都有“高级配置”或“自定义连接串”的选项,直接填写mongodb://localhost:27017/cryptoboard,绕过节点自动生成连接串的逻辑。这样能强制使用无认证的连接方式,彻底避免undefined的坑。升级Node-RED和MongoDB节点版本
你的Node-RED是v0.17.5,属于比较老旧的版本(当前稳定版已经到v3.x了),对应的node-red-node-mongodb节点可能存在无认证连接的bug。建议升级到最新稳定版:# 升级Node-RED npm install -g node-red # 进入用户目录重新安装MongoDB节点 cd ~/.node-red npm install node-red-node-mongodb新版本的节点对无认证连接的处理逻辑更完善。
验证MongoDB的认证配置
虽然你命令行能正常连接,但还是确认下MongoDB配置文件(比如mongod.conf)里的security.authorization设置是disabled(默认就是这个值),确保MongoDB没有强制要求认证。如果这个选项被设为enabled,哪怕没创建用户也会拒绝无认证连接,但你命令行能连的话大概率没问题。用原生Node.js测试连接
写个简单脚本测试本地无认证连接是否正常,排除环境问题:const MongoClient = require('mongodb').MongoClient; const url = 'mongodb://localhost:27017/cryptoboard'; MongoClient.connect(url, { useNewUrlParser: true }, (err, client) => { if (err) { console.error('连接失败:', err); return; } console.log('成功连接到MongoDB'); client.close(); });如果这个脚本能正常运行,那问题肯定出在Node-RED的节点配置或者节点版本上,按前面的方法调整即可。
内容的提问来源于stack exchange,提问作者GerM

