首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >定义了一个带有绑定参数但得到404的Goji路由

定义了一个带有绑定参数但得到404的Goji路由
EN

Stack Overflow用户
提问于 2015-07-17 19:59:23
回答 1查看 280关注 0票数 0

我有一个使用Goji的应用程序,并定义了以下路线:

代码语言:javascript
复制
func init() {
    mux := web.New()
    http.Handle("/api/list", mux)

    mux.Use(middleware.EnvInit)
    mux.Use(middleware.Logger)

    mux.Get( "/api/list",       list.HandleListGetAll)
    mux.Post("/api/list",       list.HandleListNewList)
    mux.Get( "/api/list/:id",   list.HandleListGetSingle)
}

我可以得到并发布到/api/list,但是GETing /api/list/0只会产生一个404,我认为来自Goji本身。

有人知道我做错了什么吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-18 01:26:08

Goji不返回404 -来自Goji的任何404都应该由Logger中间件记录到控制台(stdout)。向Goji路由器传递请求的上游处理程序正在弹出任何不是/api/list的东西。

您可以通过更宽松的匹配来解决这个问题:

代码语言:javascript
复制
package main

import (
    "fmt"
    "net/http"

    "github.com/zenazn/goji/web"
    "github.com/zenazn/goji/web/middleware"
)

func main() {
    mux := web.New()
    http.Handle("/api/", mux)

    mux.Use(middleware.EnvInit)
    mux.Use(middleware.Logger)

    mux.Get("/api/list/:id", debugHandler)
    mux.Get("/api/list", debugHandler)
    mux.Post("/api/list", debugHandler)

    // If Goji's router 404's, we should call our custom handler, and it
    // should also be apparent in the logs.
    mux.NotFound(notFoundHandler)
    http.ListenAndServe(":8000", nil)
}

func debugHandler(c web.C, w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "%v\n", r.URL.Path)
}

func notFoundHandler(c web.C, w http.ResponseWriter, r *http.Request) {
    http.Error(w, fmt.Sprintf("Goji 404: %s", r.URL.Path), 404)
}

请注意,我已经将上游http.Handle更改为http.Handle("/api/", mux),以提供更宽松的匹配。net/http路由器非常简单,因为/api/list/131313 (例如,id)与/api/list不匹配,它在命中您创建的Goji实例之前是404。

希望这能有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31483787

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档