2015-07-17 3 views
0

У меня есть приложение Google App Engine с помощью Годжи и определен следующие маршруты:Определяется маршрут Goji с связанным параметром, но получают 404

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) 
} 

я могу получить и POST к/API/списку, но адресности/api/list/0 просто приводит к 404, я думаю, из самого Goji.

Кто-нибудь знает, что я делаю неправильно?

ответ

0

404 не возвращается Goji-any 404 из Goji должен быть зарегистрирован на консоль (stdout) промежуточным программным обеспечением Logger. Обработчик обработчика восходящего потока, передающий запросы на маршрутизатор Goji, отскакивает от всего, что не является /api/list.

Вы можете исправить это с более мягким матча:

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 (например, с идентификатором) не соответствует /api/list его 404, прежде чем он даже попадет на экземпляр мух Goji, который вы создали.

Надеюсь, что это поможет.

+0

Отлично - это было именно оно. Большое спасибо за вашу помощь! –

Смежные вопросы