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