gpt4 book ai didi

go - 如何在发布请求中删除静态中间件?

转载 作者:行者123 更新时间:2023-12-01 20:27:06 25 4
gpt4 key购买 nike

我希望主页在发布请求后停止可用。
这是我的代码。
提前致谢。

package main
import(
"github.com/gin-contrib/static"
"github.com/gin-gonic/gin"
)

func main() {
r := gin.Default()
r.Use(static.Serve("/", static.LocalFile("./pages/home", true)))
r.POST("/example", func(c *gin.Context) {
//here I would like to stop serving the static files on a POST request
})
r.Run(":8080")
}

我的目录结构
-main.go
-pages
-home
-index.html

最佳答案

我不是gin的专家,但它与echo相似,因此我创建了一个代码段供您检查是否适合您的需求。

在附加as discussed here之后,似乎无法分离中间件,因此我的方法是检查每个请求的全局变量,以查看资源是否可用。

package main

import (
"net/http"
"sync/atomic"

"github.com/gin-contrib/static"
"github.com/gin-gonic/gin"
)

// using atomic package instead of using mutexes looks better in this scope
var noIndex int32

func indexMiddleware() gin.HandlerFunc {
hdl := static.Serve("/", static.LocalFile("./pages/home", true))
return func(c *gin.Context) {
if atomic.LoadInt32(&noIndex) == 0 {
hdl(c)
// if you have additional middlewares, let them run
c.Next()
return
}
c.AbortWithStatus(http.StatusBadRequest)
}
}

func main() {
r := gin.Default()
r.Use(indexMiddleware())
r.POST("/example", func(c *gin.Context) {
atomic.CompareAndSwapInt32(&noIndex, 0, 1)
c.String(http.StatusOK, "OK")
})
r.Run(":8080")
}

关于go - 如何在发布请求中删除静态中间件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60016406/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com