我正在使用Golang创建宁静的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并使用删除项进行响应,但实际上并没有在数据库中删除!
答案 0 :(得分:3)
您正在使用大猩猩/多路复用器。当HTTP请求进入时,此路由器将尝试按照添加路由的顺序匹配路由。
在未指定HTTP方法的情况下添加路由时,该路由将应用于所有HTTP方法。
因此,如果首先出现与DELETE方法匹配的更具体的路由,则它将与DELETE方法调用匹配,而下一条路由将与所有方法匹配。尽管它也与DELETE匹配,但是由于它前面的路由,实际的DELETE调用永远不会到达它。
但是,如果您反转它们,则未指定HTTP方法的路由将匹配所有方法,包括DELETE。