在nodejs中通过url获取哈希

我必须重置一个由bcrypt生成的散列密码…

hash = $2a$11$Ro/Y5GnkI6v1DkewwZAcBeZY7Q2a9872NUGDuXXes4J5SWfEQGHvG 

问题是哈希有一个斜杠…所以在我的路由器

 app.get('/getHash/:hash',routes.getResetHash); 

我得到一个404错误! 我认为问题是$ Ro和Y5G之间的斜线,因为哈希尝试像这样search一个url

 app.get('/getHash/$2a$11$Ro/Y5GnkI6v1DkewwZAcBeZY7Q2a9872NUGDuXXes4J5SWfEQGHvG'..... 

我如何stringify散列…?

你想要URL转义哈希。 Javascript有这两个函数encodeURIencodeURIComponent …你想要后者,因为你只想编码它的一个单一的部分,包括斜线:

 uri_safe_hash = encodeURIComponent(hash) 

使用encodeURIComponent来URI转义特殊字符如/&? 。 在这种情况下,你的哈希将如此包装:

 var hash = encodeURIComponent('$2a$11$Ro/Y...872NUGDuXXes4J5SWfEQGHvG'); 

在服务器端,它应该自动重新转换转义的参数,但你需要检查。

你可以这样做:

 app.get('/getHash/:hash1/:hash2', routes.getResetHash); 

然后在routes.getResetHash上,您可以joinhash1和hash2参数:

 routes.getResetHash = function(req, res){ var hash = req.params.hash1 + '/' + req.params.hash2; });