我们继续实现功能,本章要实现的是通过短链接跳转到原始链接的功能。注意,跳转之前,我们需要将它的访问量加一。
本章代码在04/跳转链接分支。
handler
/// 跳转到目标URL
pub async fn goto_url(
Extension(state): Extension<AppState>,
Path(id): Path<String>,
) -> HandlerRedirectResult {
let handler_name = "goto_url";
let client = get_client(&state, handler_name).await?;
let result = db::goto_url(&client, id)
.await
.map_err(log_error(handler_name.to_string()))?;
Ok(redirect(result.url.as_str()))
}
数据库
为什么不用事务
利益于 PostgreSQL 数据库的强大,我们可以使用单条 SQL 语句就实现既增加访问量,又返回原始链接。如果是其它数据库,则需要使用事务来分步操作: