为什么我将 DELETE 路由器放在 GET 之后,DELETE 端点没有被触发
Why I put the DELETE router after GET, the DELETE endpoint did not get triggered
我正在用 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 方法的邮递员测试 api 时,它总是触发 getOneArticle 并响应删除项目,但实际上并没有在数据库中删除!
您正在使用 gorilla/mux。当收到 HTTP 请求时,此路由器会尝试按照您添加它们的顺序匹配路由。
当您添加路由而不指定 HTTP 方法时,它适用于所有 HTTP 方法。
因此,如果与 DELETE 方法匹配的更具体的路由首先出现,那么它将匹配 DELETE 方法调用,下一个路由将匹配所有方法。虽然它也匹配 DELETE,但由于它前面的路由,实际的 DELETE 调用永远不会到达它。
但是如果你反转它们,没有指定HTTP方法的路由将匹配所有方法,包括DELETE。
我正在用 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 方法的邮递员测试 api 时,它总是触发 getOneArticle 并响应删除项目,但实际上并没有在数据库中删除!
您正在使用 gorilla/mux。当收到 HTTP 请求时,此路由器会尝试按照您添加它们的顺序匹配路由。
当您添加路由而不指定 HTTP 方法时,它适用于所有 HTTP 方法。
因此,如果与 DELETE 方法匹配的更具体的路由首先出现,那么它将匹配 DELETE 方法调用,下一个路由将匹配所有方法。虽然它也匹配 DELETE,但由于它前面的路由,实际的 DELETE 调用永远不会到达它。
但是如果你反转它们,没有指定HTTP方法的路由将匹配所有方法,包括DELETE。