express如何设置route使得QueryString里面的+号不被转成空格?
发布于 4个月前 作者 zdwen 363 次浏览 来自 问答

比如我的一个原始的请求的URL为:

http://192.168.1.150:3000/messenger?between=TxPhdW828e7GF63pw1/Uve6kYFsv5zrSfnDP6wj67t4WpG7sSuEwSd8ugyFD8r1z1CJkPpqVxuYqEV3xoLypUOqg0IMVy+lqylVx9+wvikw=

但是到了express里面默认取到的between的值就为:

TxPhdW828e7GF63pw1/Uve6kYFsv5zrSfnDP6wj67t4WpG7sSuEwSd8ugyFD8r1z1CJkPpqVxuYqEV3xoLypUOqg0IMVy lqylVx9 wvikw=

这就刚好是将+号给替换成了空格啊。 如何设置能够让express获取到的QueryString就是原始的QueryString呢?

5 回复

自己改REQ的函数吧

用encodeURIComponent编码再传过来试试

console.log(encodeURIComponent(‘TxPhdW828e7GF63pw1/Uve6kYFsv5zrSfnDP6wj67t4WpG7sSuEwSd8ugyFD8r1z1CJkPpqVxuYqEV3xoLypUOqg0IMVy+lqylVx9+wvikw=’));

TxPhdW828e7GF63pw1%2FUve6kYFsv5zrSfnDP6wj67t4WpG7sSuEwSd8ugyFD8r1z1CJkPpqVxuYqEV3xoLypUOqg0IMVy%2BlqylVx9%2Bwvikw%3D

console.log(unescape(‘TxPhdW828e7GF63pw1%2FUve6kYFsv5zrSfnDP6wj67t4WpG7sSuEwSd8ugyFD8r1z1CJkPpqVxuYqEV3xoLypUOqg0IMVy%2BlqylVx9%2Bwvikw%3D’));

TxPhdW828e7GF63pw1/Uve6kYFsv5zrSfnDP6wj67t4WpG7sSuEwSd8ugyFD8r1z1CJkPpqVxuYqEV3xoLypUOqg0IMVy+lqylVx9+wvikw=

请求过来的URL是你自己弄的还是别人传过来的? 你可以改变请求过来的参数吗? 一般来说,都是请求过来的url自己需要做好url encode的。 一个url请求,自己不做url encode那肯定是不对的。

@kilik52 别人提交过来的是带+号的,但是我的express的route这边取到的是全部将+号替换成了空格的。

@zdwen 恩,我的意思就是,别人提交过来的就是错的。别人提交的应该是:http://192.168.1.150:3000/messenger?between=TxPhdW828e7GF63pw1%2FUve6kYFsv5zrSfnDP6wj67t4WpG7sSuEwSd8ugyFD8r1z1CJkPpqVxuYqEV3xoLypUOqg0IMVy%2BlqylVx9%2Bwvikw%3D

也就是说,最正确的解决方案,应该是叫别人提交过来的参数做一下url encode。 然后你这边取到的就是+号了。 但是如果你无法改变别人传过来的东西。那只能很丑陋地自己再转化过去了。我不知道怎么转换。。。抱歉。。。

回到顶部