[beego]大佬升级后有些坑呀,请指点

2024-06-26 719 views
2

大佬好,算是两个问题吧, 1、哪里有个1.12.3的文档哈? 2、请允许我叙述下经过,顺便大佬看下是不是这个adapter是不是有问题哈 之前一直在学习beego也一直升级,结果这次升级2.0,悲剧了,路由里用了命名空间,直接悲剧不认了

package routers
import (
    "beegoxiaomi/controllers/api"
    beego "github.com/beego/beego/v2/adapter"
)

func init() {
    //beego.Router("/api/login", &api.LoginController{})
    ns :=
        beego.NewNamespace("/api",
            beego.NSRouter("/login", &api.LoginController{}),
        )
    //注册namespace
    beego.AddNamespace(ns)
}

好在看了官方文档,修改引用包 beego "github.com/beego/beego/v2/adapter" 换为 "github.com/beego/beego/v2/server/web" 能用了,变成如下,可后面更大的问题出现了

package routers

import (
    "beegoxiaomi/controllers/api"

    "github.com/beego/beego/v2/server/web"
)

func init() {
    //beego.Router("/api/login", &api.LoginController{})

    ns :=
        web.NewNamespace("/api",
            web.NSRouter("/login", &api.LoginController{}),
        )

    //注册namespace
    web.AddNamespace(ns)
}

然后说更大的问题哈

package routers

import (
    "beegoxiaomi/controllers/admin"
    "beegoxiaomi/models"
    "context"

    beego "github.com/beego/beego/v2/adapter"
    "github.com/beego/beego/v2/context"
    "github.com/beego/beego/v2/server/web"
)

func init() {
    // beego.Router("/admin/login", &admin.LoginController{})
    // beego.Router("/admin/focus", &admin.FocusController{})
    // beego.Router("/admin/manageer", &admin.AdminController{})

    ns :=
        web.NewNamespace("/"+beego.AppConfig.String("adminPath"),
            // 中间件 匹配路由前会做权限验证
            // 注意引用的包:"github.com/beego/beego/v2/adapter/context"
            web.NSBefore(func(ctx *context.Context) {
                // fmt.Println("我是一个中间件,匹配路由前执行")
                // beego.Info(ctx.Request.URL)

                pathname := ctx.Request.URL.String()
                userinfo, ok := ctx.Input.Session("userinfo").(models.Manager) //类型断言
                if !(ok && userinfo.Username != "") {
                    if pathname != "/"+beego.AppConfig.String("adminPath")+"/login" && pathname != "/"+beego.AppConfig.String("adminPath")+"/login/doLogin" {
                        ctx.Redirect(302, "/"+beego.AppConfig.String("adminPath")+"/login")
                    }
                }
            }),
            web.NSRouter("/", &admin.MainController{}),
        )
    //注册namespace
    web.AddNamespace(ns)
}

这里

// 注意引用的包:"github.com/beego/beego/v2/adapter/context"
web.NSBefore(func(ctx *context.Context) {

原来引用的是 github.com/astaxie/beego/context 之前按IT营大地老师教的教程,运行没有问题,但现在

web.NSBefore(func(ctx *context.Context)

这里完全就不知道该怎么整了?是不让使用自执行方法?还是这个context找不到?我记得大地老师讲得时候就重点说个这个不能引用go本身的context 各种试也没招 小白新学3个月,请大佬指下,费心了,多谢!

回答

8

像之前学gorm,看有2.0,但为了求稳先学成还是用了v1,而且作者也很靠谱1.0的文档都在 可这beego 1.12的文档没找到,也不知道自己该怎么整,没有对比自己解决起来也很困难了

3

https://github.com/beego/beedoc 这里面你可以切换到对应的tag,看1.12的文档。 目前来说因为你所有的包都切换过去了beego/beego/v2,所以你对应的context要使用beego/beego/v2/server/web/context下的这个。

我教你一个小技巧。当你发现依赖找不到的时候,你把import里面对应的东西删掉,IDE会帮你补全,或者给你提示。如果你用的GOLANG IDE,那么会自动帮你把对应依赖引入。

记住一个核心原则:如果你用的是adapter的包,那么所有的包都应该是adapter的;如果你用的是beego/beego/v2(非adapter),那么所有的都应该是beego/beego/v2下的。

8

感谢大佬指点, golang ide 有推荐的么?goland? 貌似我这vs code 有点完犊子,自动匹配不出来....

0

我是使用GOLANG 的。GOLANG是需要License的,用vs code其实挺好的,我很多朋友也用这个,就是可能装点插件,我不太了解。无法自动引入的话,你就手动加一下。

1

非常感谢大佬,感谢大佬悉心回复!

5

感谢大佬解惑。请问adapter和server/web包有啥区别呀