Node.js Express URL参数功能不支持';t将加号(+;)解码为空格

Node.js Express URL参数功能不支持';t将加号(+;)解码为空格,node.js,express,decodeuricomponent,Node.js,Express,Decodeuricomponent,使用Express的URL参数功能时,参数似乎会自动解码。也就是说,百分比编码实体解析为其标准形式%20被替换为空格 但是,加号+不会替换为空格。这大概是因为Express在内部使用了decodeURIComponent(),它也不会用空格替换plus+。简单示例代码: app.get('/:sourceFile', function (req, res, next) { console.log(req.params.sourceFile); }); 如果您请求/test%20test

使用Express的URL参数功能时,参数似乎会自动解码。也就是说,百分比编码实体解析为其标准形式<代码>%20被替换为空格

但是,加号
+
不会替换为空格。这大概是因为Express在内部使用了
decodeURIComponent()
,它也不会用空格替换plus
+
。简单示例代码:

app.get('/:sourceFile', function (req, res, next) {
    console.log(req.params.sourceFile);
});
如果您请求
/test%20test
,那么您将在控制台上获得
test test
。如果您请求
/test+test
,那么您将在控制台上获得
test+test


有没有办法改变Express 4中的这种操作模式?这是一个bug吗?

您正试图使用+来表示请求的“URI部分”中的一个空格。你不能那样做。加号仅转换为查询字符串中的空格


这不是一个错误。在URI规范(第12/13页)中,加号是一个保留字符,不应翻译为空格。

解码目前(4.9.5),正如您所怀疑的那样,使用
decodeURIComponent()
,我看不到任何修改该行为的选项(
decode_param
仅定义为模块范围内的局部变量)没有公共关系。@JonathanLonowski感谢你深入了解这一点。我想我可以创建一些中间件,用
%20
替换
+
,但这有点不方便。你想出了解决方案吗?你是否尝试过扩展decodeURIComponent()并在你的应用程序中使用它。@liberalTGM我没有,但我不愿意这么做。我必须全局覆盖它,这可能会对我自己之外的其他代码产生影响。