Node-RED中通过环境变量配置HTTP认证并发起GET请求的问题
Node-RED中通过环境变量配置HTTP认证并发起GET请求的问题
嗨,我来帮你搞定这个问题!你遇到的核心问题是找错了HTTP Request节点识别的认证属性名——Node-RED并不认msg.credentials这个属性,咱们换两种正确的方式来实现:
方法一:直接构造Basic认证请求头(最通用,无需调整节点配置)
这种方式不需要改动HTTP Request节点的认证设置,直接在请求头里带上认证信息,兼容性拉满:
// 先把环境变量的值取出来,代码更清晰易维护 const mendixUrl = env.get("MendixURL"); const plantCode = env.get("PlantCode"); const username = env.get("MendixUsername"); const password = env.get("MendixPassword"); // 用模板字符串拼接完整请求URL,比链式拼接更直观 msg.url = `${mendixUrl}/rest/shopfloorintegration/v1/message?PlantCode=${plantCode}`; // 生成Basic认证所需的Authorization头 const authStr = Buffer.from(`${username}:${password}`).toString('base64'); msg.headers = { "Authorization": `Basic ${authStr}` }; return msg;
方法二:用Node-RED官方支持的msg.auth属性(需配合节点配置)
如果你想利用Node-RED的内置认证逻辑,需要先把HTTP Request节点的Authentication选项设置为Inherit from msg.auth,然后修改代码里的认证属性:
msg.url = env.get("MendixURL") + "/rest/shopfloorintegration/v1/message?PlantCode=" + env.get("PlantCode"); // 注意这里是msg.auth,不是你之前用的msg.credentials msg.auth = { user : env.get("MendixUsername"), pass : env.get("MendixPassword") }; return msg;
为什么你的原代码不生效?
Node-RED的HTTP Request节点并没有msg.credentials这个属性的定义,它识别的认证相关属性只有两种:一是msg.auth(对应节点的"Inherit from msg.auth"配置),二是直接读取msg.headers里的Authorization头。所以你之前写的msg.credentials节点根本不会读取,自然就没效果啦。
备注:内容来源于stack exchange,提问作者Anonymoose
相关产品推荐
相关产品推荐

