如何在 URL shortener slug 中实现自定义端点
How to implement custom endpoints in a URL shortener slug
在我尝试过的所有 URL 缩短器中,没有人允许您添加 /
是一个 slug 而是 Rebrandly。例如:假设 bit.ly/abc
有效,但 bit.ly/abc/xyz
无效。但在 Rebrandly 中,rebrand.ly/abc/xyz
和 rebrand.ly/abc
都有效。我尝试自己实现它,但由于我们必须使用参数 (:slug
),所以当我访问 domain.com/abc/xyz
时,它显示 cannot get domain.com/abc/xyz
,即使 slug 已在数据库中注册。
编辑:
router.get('/:id', async (req, res) => {
try {
const ogDetails = await viewOg(req.params.id)
if (ogDetails === undefined) res.redirect('/')
else if (ogDetails) res.render('view', { og: ogDetails })
} catch (error) {
console.error(error, 'error')
}
})
此处,如果 :id
匹配 abc
之类的内容,它会按预期工作。但是假设它有类似 abc/xyz
的东西,那么即使数据在那里,我也会得到 cannot get path /abc/xyz
。
正如@Evert 所指出的,使用 req.path
而不是 req.params
是可行的方法。它将为您提供输入的完整路径。
在我尝试过的所有 URL 缩短器中,没有人允许您添加 /
是一个 slug 而是 Rebrandly。例如:假设 bit.ly/abc
有效,但 bit.ly/abc/xyz
无效。但在 Rebrandly 中,rebrand.ly/abc/xyz
和 rebrand.ly/abc
都有效。我尝试自己实现它,但由于我们必须使用参数 (:slug
),所以当我访问 domain.com/abc/xyz
时,它显示 cannot get domain.com/abc/xyz
,即使 slug 已在数据库中注册。
编辑:
router.get('/:id', async (req, res) => {
try {
const ogDetails = await viewOg(req.params.id)
if (ogDetails === undefined) res.redirect('/')
else if (ogDetails) res.render('view', { og: ogDetails })
} catch (error) {
console.error(error, 'error')
}
})
此处,如果 :id
匹配 abc
之类的内容,它会按预期工作。但是假设它有类似 abc/xyz
的东西,那么即使数据在那里,我也会得到 cannot get path /abc/xyz
。
正如@Evert 所指出的,使用 req.path
而不是 req.params
是可行的方法。它将为您提供输入的完整路径。