登录
首页 >  Golang >  Go问答

直接跳转到 Golang 中间件内的新页面

来源:stackoverflow

时间:2024-03-24 20:36:48 175浏览 收藏

在 Go 语言中,当使用中间件对 API 请求进行验证时,直接跳转到新页面的功能可能受限。如果 Ajax 调用使用 http.redirect 进行重定向,它将隐式遵循重定向,从而无法直接访问新页面。一种解决方案是使用 HTTP 状态代码在验证函数中发出信号。如果验证通过,则返回 2xx 代码,否则返回 4xx 代码。在 JavaScript 中,可以评估返回的状态代码,并在 200 上设置新位置或在 401 上输出错误消息。

问题内容

假设我有一个可以打开新页面的按钮。该按钮的操作是通过对 golang api 的 ajax 调用来处理的。该 golang api 由中间件 verify 包装,该中间件将在定向到该页面之前验证所有内容。传递到中间件的函数中定义的页面使用 golang html 模板。

router.GET("/newpage", Verify(newpageHandler))

func Verify(h http.HandlerFunc) http.HandlerFunc {
    return func(w http.ResponseWriter, r *http.Request) {

        //verify everything here
        //if all verify, call newpageHandler to redirect to new page
        h.ServeHTTP(w,r)
    }
}

func newpageHandler(w http.ResponseWriter, r *http.Request) {
    //this handler will process the html template
}

当我单击按钮(ajax 调用 /newpage)时,它不会打开新页面,而仅从 newpagehandler 处理程序返回 html 内容。我可以看到从浏览器的开发人员工具返回的 html,但它没有获得 newpagehandler 中定义的新页面。

可以使用http.redirect吗?


解决方案


ajax 调用将隐式遵循重定向。唉,没有办法阻止这种情况发生。因此,使用 http.redirect 不是一个好的选择。

无论请求是否被接受,您都可以在验证函数中发出信号。这可以通过 http 状态代码轻松完成。如果一切正常,您可以返回 2xx 代码。如果出现错误,您可以返回 4xx 代码。

func Verify(h http.HandlerFunc) http.HandlerFunc {
    return func(w http.ResponseWriter, r *http.Request) {

        //verify everything here. verifcationFunc() returns a bool
        if verifcationFunc() {
          w.WriteHeader(http.StatusOK)
        } else {
          w.WriteHeader(http.StatusUnauthorized)
        }
    }
}

您现在可以在 javascript 中评估返回的状态代码。在 200 上,您可以在 javascript 中设置新位置。这可以通过 window.location 来完成。对于 401 代码(在上面的示例中),您可以输出错误消息。

本篇关于《直接跳转到 Golang 中间件内的新页面》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>