httprouter配置NotFound

2023-11-30

我在用着httprouter对于 API,我正在尝试找出如何处理 404。它确实说在docs404 可以手动处理,但我真的不知道如何编写自己的自定义处理程序.

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

router.NotFound(pageNotFound)

但我得到了错误not enough arguments in call to router.NotFound.

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


方式httprouter.Router is a struct其中有一个字段:

NotFound http.Handler

所以类型NotFound is http.Handler,具有单个方法的接口类型:

ServeHTTP(ResponseWriter, *Request)

如果您想要自己的自定义“Not Found”处理程序,则必须设置一个实现此接口的值。

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

func(http.ResponseWriter, *http.Request)

并使用http.HandlerFunc()辅助函数将其“转换”为实现以下功能的值http.Handler接口,其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)

This NotFound处理程序将被调用httprouter包裹。如果您想从其他处理程序之一手动调用它,则必须传递一个ResponseWriter and a *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
    // ...
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

httprouter配置NotFound 的相关文章

  • 将产生 goroutine 的 golang 方法

    据我所知 如果 goroutine 太忙 它们会阻止其他 goroutine 运行 对我来说 这意味着我的应用程序的性能和响应能力可能取决于我知道哪些库方法将控制其他 goroutine 例如通常是 Read 和 Write 有什么方法可以
  • 为 REST API 编写单元测试的最佳方法是什么?

    在为 API 包装器编写单元测试时 我应该对 REST API 端点进行真正的调用 还是应该使用 mocl 响应来模拟成功和错误的调用 单元测试意味着只测试你的unit API 包装器 仅此而已 因此 不幸的是 您应该模拟整个 API 另一
  • 我们如何在 Go 中使用通道来代替互斥锁?

    通道将通信 值的交换 与同步相结合 保证两个计算 goroutine 处于已知状态 如何使用 Google Go 中的通道来执行互斥量的功能 package main import sync var global int 0 var m s
  • 不加载隐藏图像

    我的网站上有一堆隐藏图像 它们的容器 DIV 具有 style display none 根据用户的操作 某些图像可能会通过 JavaScript 显示 问题是我的所有图像都是在打开页面时加载的 我想通过仅加载最终可见的图像来减轻服务器的压
  • Node.js:在检索 http 请求正文之前断开 http 请求连接

    我正在用 Node js 编写一个 http 服务器 我有一个客户端通过 HTTP POST 多部分 数据 将大文件上传到该服务器 我想接受唯一使用有效文件名上传文件的连接 我有一些条件 在服务器检索数据之前应断开无效文件名连接 我不知道如
  • 指针上定义的方法仍然可以用值调用

    Effective Go 文档说明如下 关于接收者的指针与值的规则是 可以在指针和值上调用值方法 但只能在指针上调用指针方法 http tip golang org doc effective go html pointers vs val
  • 测试 gRPC 服务

    我想测试用 Go 编写的 gRPC 服务 我使用的示例是 Hello World 服务器示例grpc go 仓库 https github com grpc grpc go blob master examples helloworld g
  • 如何找出数据包的HTTP头长度?

    我知道如何手动执行此操作 通过查看十六进制转储 我怎样才能自动获得相同的信息 我必须使用 API 吗 我有wireshark 和Microsoft 网络监视器 这可以通过简单地实现Lua解析器 http wiki wireshark org
  • eBay API 调用不适用于 UPC/EAN

    eBay 的 API findItemsByProduct 操作适用于 UPC 和 EAN 但不幸的是它不起作用 例如 下面的 HTTP GET 请求会抛出 无效的产品 ID 值 错误41 Note 请将 SECURITY APPNAME
  • 关于编写惯用的 Golang 的建议

    我正在掌握 Golang 的做事方式 首先是一些示例代码 package main import log os func logIt s string f os OpenFile errors log os O RDWR os O CREA
  • 如何对结构切片而不是切片结构进行范围调整

    稍微玩了一下 Go HTML 模板后 我发现的所有循环模板中对象的示例都是将切片结构传递给模板 有点像这个示例 type UserList struct Id int Name string var templates template M
  • 如何在 G-WAN 中添加 HTTP/2

    我想知道是否可以通过使用解决方案 nghttp2 https nghttp2 org https nghttp2 org 很抱歉这么晚才回答 出于某种原因 Stackoverflow 没有通知我们这个问题 我之所以找到它只是因为收到了更新的
  • Android 套接字和 HTTP 响应标头

    有趣的是 我可能无意中找到了解决方案是否可以使用普通套接字连接发送 HTTP 请求并接收没有标头的响应 https stackoverflow com questions 8320574 我希望我忽略了一些东西 无论如何 我正在连接到 We
  • 如何解决 302 重定向上的 POST 更改为 GET 的问题?

    我网站的某些部分只能通过 HTTPS 访问 不是整个网站 安全与性能妥协 并且如果通过纯 HTTP 发送请求 则 HTTPS 是通过对安全部分的请求进行 302 重定向来强制执行的 问题是对于所有主流浏览器来说 如果您在 POST 上执行
  • 如何用 C 语言通过 HTTP 协议发送图像?

    我是一名正在做网络服务器练习的学生 我需要一些帮助 我的网络服务器在文本页面上运行良好 但是每当浏览器发送一个 GET img jpg HTTP 1 1请求 我不知道如何处理 我听说 HTTP 协议是基于文本的 那么如何在 HTTP 响应中
  • 为什么我在 Firefox 中突然遇到“阻止加载混合活动内容”问题?

    今天早上 在将我的 Firefox 浏览器升级到最新版本 从 22 到 23 后 我的后台 网站 的一些关键功能停止工作 查看Firebug日志 报告了以下错误 Blocked loading mixed active content ht
  • Node.js 上的 Connect 出现“无法 GET /”

    我正在尝试使用以下方式开始提供一些静态网页connect像这样 var connect require connect var nowjs require now var io require socket io var app conne
  • 在 HTTP PATCH 请求中包含数据的正确方法

    当我组合 HTTP PATCH 请求时 可以选择哪些选项来包含 URL 参数之外的数据 以下任何一项都有效吗 最常见的选择是什么 多部分 表单数据 应用程序 x www form urlencoded Raw JSON 还有其他的吗 HTT
  • Web API GET 请求中的电子邮件地址

    我正在开发在 ASP NET Web API 中实现的 REST API 我们想要支持的一个场景是执行GET通过电子邮件地址请求一些用户信息 理想情况下 客户应该能够执行以下操作 GET api v1 users email your em
  • 结构体到磁盘的高效 Go 序列化

    我的任务是将 C 代码替换为 Go 而且我对 Go API 还很陌生 我正在使用 gob 将数百个键 值条目编码到磁盘页面 但 gob 编码有太多不需要的膨胀 package main import bytes encoding gob f

随机推荐

  • 快速发送 MIME 类型错误的资产

    Using Express to serve a Vue js webpack app I am receiving the following error after deploy Is my code for serving the a
  • 由未知权威机构签署的 x509 证书 - go-pingdom

    我正在使用 Go 包pingdom go查询 Pingdom 该应用程序容器化如下 FROM alpine 3 8 USER nobody ADD build output bin app usr local bin app 但是我收到以下
  • android - 导入 - 与开发人员 google com games

    我按照这里的指南进行操作https developers google com games 我完成了步骤 1 中的所有说明 步骤 1 下载示例应用程序 但该项目未编译 导入 google play services lib 项目和 Base
  • 将图例添加到 ggplot2

    我一直在尝试向我的 ggplot 添加图例 但惨败 我确实遇到了与手动添加图例相关的其他问题 例如1 2但无法将答案应用到我的 ggplot 上 我尝试了该功能scale colour manual但传说并没有出现 任何帮助将非常感激 p
  • 欧拉计划 17

    我一直在尝试解决欧拉 17 问题 但遇到了一些麻烦 该问题的定义是 如果数字 1 到 5 用单词写成 一 二 三 四 五 那么总共使用了 3 3 5 4 4 19 个字母 如果从 1 到 1000 一千 的所有数字都用文字写出来 需要使用多
  • “必需”验证属性在 asp.net mvc 3 中不起作用,而其他属性则有效

    我有一个奇怪的情况 我为我的实体对象创建了一个单独的验证类 MetadataType typeof TopTenFav Validation public partial class TopTenFav public class TopTe
  • 为什么我的代码块仅显示输出不到一秒......?

    我一周前安装了 Codeblock 没有更改任何设置 我创建了一个简单的控制台应用程序 当我单击 构建 并运行它时 它会显示我的输出大约几毫秒然后消失 它过去会永远保留 直到我退出它 有谁知道为什么会发生这种情况 在 构建日志 选项卡中显示
  • 紧急安装并与 Orion Context Broker 集成

    在 Rush 中运行监听器和一次消费者之后 我运行 contextBroker rush localhost 5001 我确保使用 Orion 0 17 而不是 0 14 输入 version url 后显示的是
  • 添加CombinedResourceHandler后pe:ckEditor不再工作

    I added OmniFaces使用CombinedResourceHandler 但现在PrimeFaces 扩展
  • 如何将协议定义为 @ObservedObject 属性的类型?

    我有一个依赖于视图模型的 swiftui 视图 视图模型有一些已发布的属性 我想为视图模型层次结构定义一个协议和默认实现 并使视图依赖于协议而不是具体类 我希望能够写出以下内容 protocol ItemViewModel Observab
  • 导入 .p12 文件中包含的所有证书

    我有一个 p12我的 ASP NET 应用程序通过 HTTPS 连接到 Web 服务的文件 我正在尝试导入 p12文件保存到本地计算机 我的商店中 这 p12 file 包含多个证书 一个包含私钥 另一个是 CA 证书以完成链 目前 我正在
  • Prestashop - 如何写入日志文件?

    我应该在 Prestashop 模块中使用什么 php 代码来写入日志文件 我用过 Logger addLog something 1 但它不起作用 您还可以使用以下代码将日志存储在文件中 logger new FileLogger 0 0
  • HTML5 拖放 拖动时更改图标/光标

    我想知道当我拖动 dragover dragenter 图标 光标时如何更改例如拒绝或允许部分 当然 我可以用光标移动绝对定位的 DOM 部分 但我对原生 HTML5 解决方案感兴趣 Thanks 你在追寻掉落效果 在dragstart中初
  • 按模式递归添加文件

    如何通过位于不同目录中的模式 或全局 递归添加文件 例如 我想添加A B C foo java and D E F bar java 以及其他几个 java 文件 使用一个命令 git add java 不幸的是 这并没有按预期工作 您可以
  • lstat:无法访问另一个目录中的文件

    我正在尝试编写类似 ls 的程序 产生类似的输出ls l包含文件的权限 所有者 时间和名称 如果我通过的话效果很好 或什么都没有 所以它适用于当前目录 但是如果我将任何其他目录传入或传出当前目录 perror说它 无法访问 文件 请帮我找出
  • 使用 XAMPP 启用 SSL

    我一直在尽可能地遵循本指南http robsnotebook com xampp ssl encrypt passwords 然而 每当我浏览到以 https 开头的页面时 apache 服务器都会回复 404 未找到对象 我缺少什么设置
  • Python 3.2:cx_freeze 编译我的程序,但处于调试模式

    我正在使用 Python 3 2 和 Pygame 制作游戏 我已经成功地使用了cx freeze将所有内容捆绑到可执行文件中 然后运行 美好的 唯一的问题是 即使当我通过 OO标记我的setup py 我的游戏是在调试模式下编译的 我已经
  • NHibernate / MySQL 字符串连接

    我有一个 nhibernate linq 查询 如下所示 from b in session Query
  • 如何以编程方式在 Active Directory 中搜索打印机

    尝试使用 C 在 Active Directory 中查找打印机 共享 这是我适用于用户的示例代码 但是我看不到能够找到使用相同概念的打印机 我是 Active Directory 新手 DirectoryEntry entry new D
  • httprouter配置NotFound

    我在用着httprouter对于 API 我正在尝试找出如何处理 404 它确实说在docs404 可以手动处理 但我真的不知道如何编写自己的自定义处理程序 在我的其他路线之后我尝试了以下方法 router NotFound pageNot