短链接跳转到原始链接

892220
2021/11/26 04:39:08

我们继续实现功能,本章要实现的是通过短链接跳转到原始链接的功能。注意,跳转之前,我们需要将它的访问量加一。

本章代码在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 语句就实现既增加访问量,又返回原始链接。如果是其它数据库,则需要使用事务来分步操作: