- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在使用 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/
我已经创建了嵌套模板,当我使用“net/http”和 http.HandelFunc 时它可以工作,但是,我决定继续使用“github.com/julienschmidt/httprouter”,因为
我来自 node express,我能够传递尽可能多的中间件,例如:routes.use('/*', ensureAuth, logImportant, ... n); 如何在使用 r.GET("/"
我正在使用路由器 ( httprouter ) 并希望从根目录提供静态文件。 css 文件在 static/style.css 在模板中 main.go router := httprouter.N
我正在使用 httprouter对于 API,我正在尝试弄清楚如何处理 404。它确实在 docs 中说404 可以手动处理,但我真的不知道如何编写自己的自定义处理程序。 我在其他路线之后尝试了以下.
我正在使用 https://github.com/julienschmidt/httprouter在我的 Go 项目中。 我刚才问了这个问题,@icza 解决了这个问题:httprouter conf
我有一个使用 get 方法提交数据的 html 表单。 Web Search Enter your tags(Comma separated)
我刚刚学会了如何使用 http路由器去打包并阅读许多关于它的文件,但是 当涉及到索引时,未能使用传递参数脚趾模板的 :name 样式 页面模板。 前任。 我的路由器代码: func getRo
Golang.org 有一篇关于如何做到这一点的博文: http://blog.golang.org/error-handling-and-go 他们基本上创造了一种新类型 type appHandl
我正在尝试从自签名证书创建 keystore 和信任库文件,用于部署在 JBoss ESB 中的 HTTPRouter 操作。我使用 openssl 检索感兴趣的证书并使用以下命令生成 keystor
我有以下 httprouter 处理程序,但我想自定义以便我可以注入(inject)我自己的记录器函数。 router := httprouter.New() router.Handle("GET",
我似乎不知道如何正确地一起使用中间件和 Http Router。 我的代码是: type appContext struct { db *mgo.Database } func main(){
我正在尝试为 httprouter 包实现类似 expressjs 的功能。我创建了一个结构 type mounter type Mounter struct { BasePath strin
对于一个可能很简单的问题,我深陷其中。我需要使用对第三方 CAS 身份验证服务的调用包装一个函数。我正在使用 go-cas 来执行此操作,并且在我开始添加路由要求之前一直有效。我选择了 Julien
我正在使用 httprouter去库实现一个REST API服务,我决定试试ServeFiles提供一些与我的 API 关联的模式文件。我注意到它使用了 Go 的便捷内置 net/http用于提供静态
我想使用 httprouter与 muxchain同时保留路由参数,例如 /:user/。 举个例子: func log(res http.ResponseWriter, req *http.Requ
我是 golang 的新手,使用 julienschmidt/httprouter 进行路由。 基于以下代码片段,能够发送一个参数。 但我对发送多个参数有点困惑,云任何人都可以帮助我。 package
我可以使用标准的 net/http 包获取 favicon.icon,但在使用 julienschmidt/httprouter 时遇到了问题。这就是我正在尝试的,并且收到 favicon.ico 文
我正在尝试创建一个 HTTPRouter 操作(在 esb 内),它将一些 XML 发送到外部 URL。该 URL 是安全的,但有一个自签名证书,我没有该证书的 keystore 。下面是我编写的用于
无法将 Prometheus 中间件传递到 httprouter 端点定义中。 我正在尝试将 Prometheus 中间件添加到我们的端点实现中。但是我们的端点正在使用名为 httprouter 的第
我很难理解如何一起使用 negroni 和 httprouter。 我有几个公共(public)路由,例如 /api/v1/ping 我有一堆需要身份验证中间件的私有(private)路由,例如/ap
我是一名优秀的程序员,十分优秀!