我正在访问我前段时间编写的简单网络服务器的一些旧代码,我的请求模式不再有效。我有一个初始化我的路由的函数,如下所示:func (a *App) InitializeRoutes() { a.Router.HandleFunc("/api/forecast/detailed?city={city}&state={state}&period={period}", a.DetailedForecast).Methods("GET") a.Router.HandleFunc("/api/forecast/detailed?city={city}&state={state}", a.DetailedForecast).Methods("GET") a.Router.HandleFunc("/api/forecast/detailed?random", a.RandomDetailedForecast).Methods("GET") a.Router.HandleFunc("/api/forecast/hourly?city={city}&state={state}&hours={hours}", a.HourlyForecast).Methods("GET") a.Router.HandleFunc("/api/forecast/hourly?city={city}&state={state}", a.HourlyForecast).Methods("GET") a.Router.NotFoundHandler = http.HandlerFunc(a.Custom404Handler)}我的自定义 404 处理程序只返回一个 {"error": "Not Found"} 的 json从这里开始,我在我的应用程序的初始化函数(底部 3 行)结束时初始化这些路由:func (a *App) Initialize() { var err error conf.configure() sqlDataSource := fmt.Sprintf( "postgres://%s:%s@%s:%s/%s?sslmode=disable", conf.sqlUsername, conf.sqlPassword, conf.sqlHost, conf.sqlPort, conf.sqlDbName) a.DB, err = sql.Open("postgres", sqlDataSource) if err != nil { log.Fatal(err) } a.Redis = redis.NewClient(&redis.Options{ Addr: fmt.Sprintf("%s:%s", conf.redisHost, conf.redisPort), Password: conf.redisPassword, DB: conf.redisDb, }) a.Router = mux.NewRouter() a.Logger = handlers.CombinedLoggingHandler(os.Stdout, a.Router) a.InitializeRoutes()}我的应用程序在以下功能上运行:func (a *App) Run() { port := fmt.Sprintf(":%s", os.Getenv("SERVER_PORT")) log.Fatal(http.ListenAndServe(port, a.Logger))}我的服务器运行在:func main() { a := App{} a.Initialize() a.Run()}当我尝试向我所知的有效 URL 模式发出请求时,我得到以下信息:>>> import requests>>> r = requests.get("http://localhost:8000/api/forecast/detailed?city=Chicago&state=IL")>>> r<Response [404]>>>> r.json(){'error': 'Not Found'}
1 回答
至尊宝的传说
TA贡献1789条经验 获得超10个赞
从自述文件...要匹配您需要使用的查询
r := mux.NewRouter()
...
r.Queries("key", "value")
匹配 PathPrefix
r.PathPrefix("/products/")
我认为您需要将这两者结合起来才能实现您想要的。
- 1 回答
- 0 关注
- 107 浏览
添加回答
举报
0/150
提交
取消