Golang后端使用杜松子酒创建路线

8dtrkrch  于 2023-01-15  发布在  Go
关注(0)|答案(1)|浏览(102)

首先,我想道歉,因为我正在学习英语,所以我的英语不是很好,但我希望你能理解我的问题:)我不知道为什么,但总是当我建立我的应用程序到linux和推到一个docker容器,我运行这个应用程序,我不能使用我的浏览器中的路线,但总是当我创建一个单一的路由在net/http中,我可以运行这个路由在我的浏览器中。我写我的代码在windows系统上,我需要部署我的应用程序在一个docker推到一个云服务运行我的路线,我不知道如果错误是在杜松子酒,但非常奇怪
以下是路径示例

package routes

import (
    "ahboa/src/controllers"
    "fmt"

    "github.com/gin-contrib/cors"
    "github.com/gin-gonic/gin"

    swaggerfiles "github.com/swaggo/files"
    ginSwagger "github.com/swaggo/gin-swagger"
)

func HandleRequests() {
    router := gin.Default()
    gin.SetMode(gin.ReleaseMode)
    router.SetTrustedProxies(nil)

    config := cors.DefaultConfig()
    config.AllowOrigins = []string{"*"}

    router.Use(cors.New(config))

    main := router.Group("api/")
    {
        login := main.Group("login")
        {
            login.POST("/", controllers.LoginByEmail)
        }
        users := main.Group("users")
        {
            users.GET("/", controllers.GetAllUsers)
            users.GET("/:id", controllers.GetUsersByID)
            users.POST("/", controllers.CreateUsers)
            users.PUT("/:id", controllers.UpdateUsers)
            users.DELETE("/:id", controllers.DeleteUsers)
        }
        swagger := main.Group("swagger")
        {
            swagger.GET("/*any", ginSwagger.WrapHandler(swaggerfiles.Handler))
        }
        router.Run(fmt.Sprint(":", "8080"))
    }
}

下面是我模型的一个示例

func GetAllUsers() ([]entities.Users, error) {
    var Users []entities.Users
    result := database.Table("users").Model(&Users).Find(&Users)
    return Users, result.Error
}

这是我的控制器的一个例子

func GetAllUsers(ctx *gin.Context) {
    Users, err := models.GetAllUsers()
    if err != nil {
        httputil.NewError(ctx, http.StatusBadRequest, err)
        return
    }
    ctx.JSON(http.StatusOK, Users)
}

我有成功当我创建一个单一的请求使用net/http但我没有收到这成功当我把这代码当我使用gin

0g0grzrc

0g0grzrc1#

问题可能与Linux环境的配置有关,特别是应用程序正在侦听的端口。您正在尝试通过以下方式在端口8080上运行应用程序
路由器。运行(fmt.Sprint(“:“,“8080”))
此端口可能被防火墙或Linux系统上的其他配置阻止。您可以通过运行命令systemctl status firewalld来检查防火墙的状态。如果防火墙处于活动状态,您可以尝试使用命令firewall-cmd --add-port=8080/tcp --添加一个规则,以允许端口8080上的入站通信然后使用命令firewall-cmd --reload重新加载防火墙。
另一个可能的原因是CORS(跨源资源共享)标头设置不正确,尤其是此行
配置允许起始点= []字符串{"*"}
这允许所有源到您的服务器,但最好将其限制为仅允许请求到的URL,并且可能还需要向CORS配置添加头或方法。
这是一个开始解决问题的地方。但是如果没有关于您的确切环境和设置的详细信息,很难给予您一个更具体的答案。

相关问题