Node.js GET或POST from express不解析;百分号“;要求

Node.js GET或POST from express不解析;百分号“;要求,node.js,express,parsing,escaping,node-modules,Node.js,Express,Parsing,Escaping,Node Modules,我在解析使用“%26”而不是“&”字符的HTTP请求时遇到困难 上下文:我正在尝试接收IP摄像机发出的HTTP请求,该摄像机有一个无法发送“&”字符的限制,因此我必须使用“%26”将其设置为单独的参数,因此摄像机发出如下POST请求: 要在服务器端处理此请求,我有以下简单功能: Broker.all("*", (req,res) => { console.log("foo=" + req.query.foo); console.lo

我在解析使用“%26”而不是“&”字符的HTTP请求时遇到困难

上下文:我正在尝试接收IP摄像机发出的HTTP请求,该摄像机有一个无法发送“&”字符的限制,因此我必须使用“%26”将其设置为单独的参数,因此摄像机发出如下POST请求:

要在服务器端处理此请求,我有以下简单功能:

Broker.all("*", (req,res) => {
    console.log("foo=" + req.query.foo);
    console.log("bar=" + req.query.bar);

    console.log("Received a generic put request");
    res.send("Processed");
});
当我使用“&”字符发出请求时,此代码工作正常

这是请求的结果:

这是请求的结果:

过去我一直在磕头。。。(羞愧)。。。不管有多少小时,我都不知道我做错了什么。 我很确定这很容易,但我真的在论坛上找不到它,可能是因为我无法在帖子中专门搜索“%26”。 任何帮助都将不胜感激

解决后编辑

正如GPack所建议的那样,我使用了他的解析器代码,它似乎正在工作。只需确保事先检查通用URL是否有参数。 我仍然相信有一种更自然的方式可以用express实现这一点

这是正在运行的解析器的新代码:

broker.all("*", (req,res) => {

    const list = req.originalUrl.split("?")[1].split("%26");
    const params = list.reduce((obj, str) => {
        const parts = str.split("=");
        obj[parts[0]] = parts[1];
        return obj;
    }, {});
    console.log(params); // { bar: "them", foo: "me" }
    
    console.log("foo=" + params.foo);
    console.log("bar=" + params.bar);

    console.log("Received a generic put request");
    res.send("I'm just a simple broker");
});

我尝试使用decodeURI&decodeURIComponent,但没有成功。
所以我自己编写了解析器:

//请求对象应该是这样的(带有其他属性)
常数要求={
originalUrl:“/test?foo=me%26bar=them”
}
//您可能希望处理请求没有参数的情况
const list=req.originalUrl.split(“?”[1]。split(“%26”);
常量参数=list.reduce((obj,str)=>{
const parts=str.split(“=”);
obj[零件[0]]=零件[1];
返回obj;
}, {});
console.log(参数);//{bar:“他们”,foo:“我”}

谢谢!这确实解决了问题,但我试图避免这种情况,我假设express或其他东西可以处理这个问题…所以。。。你会考虑接受我的答案吗?我一直在尝试把你的解析器功能应用到我的身上,并且发现了困难。我将艰难地编辑我的帖子,应该是
var list=req.query如果我使用
list=req.query我得到一个“list.reduce不是函数”错误。如果我使用
list=req.query.split(“&”)我收到一个“拆分不是函数”错误。如果我使用
var list=req.query.split(“%26”)它可以工作,但我得到以下结果:{{“foo”:“me&bar”:“themes”}
foo=me&bar=them
bar=undefined
Received a generic put request
broker.all("*", (req,res) => {

    const list = req.originalUrl.split("?")[1].split("%26");
    const params = list.reduce((obj, str) => {
        const parts = str.split("=");
        obj[parts[0]] = parts[1];
        return obj;
    }, {});
    console.log(params); // { bar: "them", foo: "me" }
    
    console.log("foo=" + params.foo);
    console.log("bar=" + params.bar);

    console.log("Received a generic put request");
    res.send("I'm just a simple broker");
});