首页 > 解决方案 > Node-red http 响应如何重定向到以 msg.payload 作为查询字符串的 URL

问题描述

我是 Node-red 的新手,并尝试使用 http 响应节点来重定向带有查询字符串的页面。

我阅读了这个问题,并通过更改节点成功使用了标头位置(我也尝试直接在 http 响应节点中设置属性)重定向到 URL。我的目标是以 msg.payload 作为查询字符串重定向到一个网站。我的 msg.payload 包含一个简单的 JSON 对象,例如

{"id":"1", "condition":2, "nset":3}

我尝试将位置设置为,http://[redirect_website]/getinfo?{{payload}}但我被重定向到http://[redirect_website]/getinfo?{{payload}}而不是http://[redirect_website]/getinfo?id=1&condition=2&nset=3. 谁能帮我解决这个问题?

标签: node-red

解决方案


您可能必须自己构建查询字符串。

所以使用函数节点来设置location标题它会是这样的:

msg.statusCode = 303;
msg.headers = {
    Location: "https://example.com/getinfo?id=" +
    msg.payload.id + "&condition=" +
    msg.payload.condition + "&nset=" +
    msg.payload.nset;
}
delete msg.payload;
return msg;

仅当所有值都是数字时,此代码才是安全的,如果某些值是字符串,那么您需要确保在添加它们之前对它们进行 URLEncode。

如果事情变得更复杂,您可能应该将querystring模块(doc)添加到全局上下文(如何将模块添加到全局上下文docmsg.payload )并在函数节点中使用它从对象中一次性生成查询字符串。


推荐阅读