gpt4 book ai didi

go - 为什么我将 DELETE 路由器放在 GET 之后,DELETE 端点没有被触发

转载 作者:数据小太阳 更新时间:2023-10-29 03:31:20 26 4
gpt4 key购买 nike

我正在使用 Golang 创建 restful API,我按索引将删除路由器放在 getOne 路由器之后,删除路由器从未被触发?我不知道为什么?当我反转它们时,它起作用了!有人能知道原因吗??

这是为了使用 Golang 构建 Restful API。

无效:

myRouter.HandleFunc("/article", createNewArticle).Methods("POST")

myRouter.HandleFunc("/article/{id}", getOneArticle)

myRouter.HandleFunc("/article/{id}", deleteArticle).Methods("DELETE")

有效!

myRouter.HandleFunc("/article", createNewArticle).Methods("POST")
myRouter.HandleFunc("/article/{id}", deleteArticle).Methods("DELETE")
myRouter.HandleFunc("/article/{id}", getOneArticle)

当我使用带有 DELETE 方法的 postman 测试 api 时,它总是触发 getOneArticle 并以删除项作为响应,但实际上并没有在数据库中删除!

最佳答案

您正在使用 gorilla /mux。当 HTTP 请求传入时,此路由器会尝试按照您添加它们的顺序匹配路由。

当您添加路由而不指定 HTTP 方法时,它适用于所有 HTTP 方法。

因此,如果与 DELETE 方法匹配的更具体的路由首先出现,那么它将匹配 DELETE 方法调用,下一个路由将匹配所有方法。虽然它也会匹配 DELETE,但由于它前面的路由,实际的 DELETE 调用永远不会到达它。

但是如果你反转它们,没有指定 HTTP 方法的路由将匹配所有方法,包括 DELETE。

关于go - 为什么我将 DELETE 路由器放在 GET 之后,DELETE 端点没有被触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56227793/

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