gpt4 book ai didi

httprouter 配置 NotFound

转载 作者:IT王子 更新时间:2023-10-29 00:37:48 25 4
gpt4 key购买 nike

我正在使用 httprouter对于 API,我正在尝试弄清楚如何处理 404。它确实在 docs 中说404 可以手动处理,但我真的不知道如何编写自己的自定义处理程序

我在其他路线之后尝试了以下...

router.NotFound(pageNotFound)

但是我收到错误消息在调用 router.NotFound 时没有足够的参数

如果有人能指出我正确的方向,那就太好了。

最佳答案

类型httprouter.Router是一个 struct,它有一个字段:

NotFound http.Handler

NotFound 的类型是 http.Handler ,一个只有一个方法的接口(interface)类型:

ServeHTTP(ResponseWriter, *Request)

如果您想要自己的自定义“未找到”处理程序,则必须设置一个实现此接口(interface)的值。

最简单的方法是定义一个带有签名的函数:

func(http.ResponseWriter, *http.Request)

并使用 http.HandlerFunc()辅助函数将其“转换”为实现 http.Handler 接口(interface)的值,其 ServeHTTP() 方法仅调用具有上述签名的函数。

例如:

func MyNotFound(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "text/plain; charset=utf-8")
w.WriteHeader(http.StatusNotFound) // StatusNotFound = 404
w.Write([]byte("My own Not Found handler."))
w.Write([]byte(" The page you requested could not be found."))
}

var router *httprouter.Router = ... // Your router value
router.NotFound = http.HandlerFunc(MyNotFound)

NotFound 处理程序将由 httprouter 包调用。如果您想从其他处理程序之一手动调用它,则必须传递 ResponseWriter和一个 *Request对它来说,像这样:

func ResourceHandler(w http.ResponseWriter, r *http.Request) {
exists := ... // Find out if requested resource is valid and available
if !exists {
MyNotFound(w, r) // Pass ResponseWriter and Request
// Or via the Router:
// router.NotFound(w, r)
return
}

// Resource exists, serve it
// ...
}

关于httprouter 配置 NotFound,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30500322/

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