Node.js GET或POST from express不解析;百分号“;要求
我在解析使用“%26”而不是“&”字符的HTTP请求时遇到困难 上下文:我正在尝试接收IP摄像机发出的HTTP请求,该摄像机有一个无法发送“&”字符的限制,因此我必须使用“%26”将其设置为单独的参数,因此摄像机发出如下POST请求: 要在服务器端处理此请求,我有以下简单功能: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
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");
});