我将url路径中的随机字符串作为路由参数来实现重置密码。我后来在app.param中使用它。当随机字符串包含字符“/”时,应用程序无法正常工作。以下是我的实现
在models/mymodelname.js中

resetId = crypto.randomBytes(16).toString('base64');

在routes/mymodelname.js中
app.post('/resetpassword/:resetId',users.resetPassword);

有什么方法可以使用从随机字符串中获取的resetid作为路由参数吗?

最佳答案

以下是解决此问题的几种方法:
使用encodeURIComponent函数将问题字符转换为其%XX表示:

resetId = crypto.randomBytes(16).toString('base64');
// ...
resetIdEscaped = encodeURIComponent(resetId);
// Example: L73jflJreR%2FuivSdnMU5%2Fg%3D%3D

buffer转换为字符串时,请使用十六进制编码而不是base64编码:
resetId = crypto.randomBytes(16).toString('hex');
// Example: 13e095f8967a1ba06d11eeeed616051d

09-25 19:22