【发布时间】:2021-12-29 23:30:21
【问题描述】:
我正在制作链接缩短器。我之前遇到了 URL 的问题,但是在将 URL 放入数据库时对 URL 进行了编码,并且在重定向时它会解码 URL 并重定向到它。问题是,它没有将我重定向到喜欢https://google.com,而是将我重定向到 mypage.com/google.com。我尝试制作一个“调试”页面,它只是解码 URL 并且 URL 很好,带有 HTTPS:// 和所有内容。最大的问题是它都在 localhost 上运行,但是当我在我的 VPS 上部署它时它不起作用。只有解码 URL 的调试页面有效。我正在使用 express.js 和猫鼬。这是我重定向用户的代码:
app.get('/:shortUrl', async (req, res) => {
const shortUrl = await shorturl.findOne({ short: req.params.shortUrl })
if (shortUrl == null) {
res.send('URL not found!')
} else {
shortUrl.clicks++
shortUrl.save()
res.redirect(decodeURIComponent(shortUrl.full))
}
})
【问题讨论】:
-
您在 URL 的开头缺少
//,因此它会将其视为您页面中的相对 URL。 -
@Barmar 在解码后的 URL 中有 //。但是当我尝试重定向到它时它只是“消失”
-
尝试
res.redirect(new URL(decodeURIComponent(shortUrl.full)).toString())以确保安全 -
请显示
console.log(decodeURIComponent(shortUrl.full))的输出 -
//必须在https:这样的方案的开头或之后
标签: javascript api express mongoose decoding