在HTTP路由器中将未知的URL路径设置为错误

时间:2018-07-23 09:59:42

标签: http go server url-routing

问题:

我很难找到问题的答案,但我不知道怎么问,这是一个很大的可能性。

我在Go Server上遇到问题。我对编程并不了解很多,但是我确实用它做了一个服务器。该服务器将显示一个JSON文件,然后将其拉到与我无关的其他HTML文件中。这可行。我的问题是服务器的路径。

代码

package main

import (
    "encoding/json"
    "fmt"
    "net/http"
    "os"
    "time"
)

type Event struct {
    Start     time.Time `json:"start"`
    End       time.Time `json:"end"`
    Summary   string    `json:"summary"`
    Organizer string    `json:"organizer"`
    MeetURL   string    `json:"meet_url"`
}

type EventSlice struct {
    Events []Event `json:"events"`
}

func loadEvents(filename string) (EventSlice, error) {
    // Open events file.
    file, err := os.Open(filename)
    if err != nil {
        return EventSlice{}, err
    }
    var list EventSlice

    // Parse events from json file to events slice.
    err = json.NewDecoder(file).Decode(&list)
    if err != nil {
        fmt.Println("Displays", err)
        return EventSlice{}, err
    }
    return list, nil
}

func handler(w http.ResponseWriter, r *http.Request) {
    w.Header().Set("Access-Control-Allow-Origin", "*")
    events, err := loadEvents("json.json")
    if err != nil {
        fmt.Fprintln(w, err)
    }

    // Reduntant step in real life
    err = json.NewEncoder(w).Encode(events)
    if err != nil {
        fmt.Fprintln(w, err)
    }
}

func handler_over(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "This is my server. Hello.")
}

func main() {
    http.HandleFunc("/", handler_over)
    http.HandleFunc("/events", handler)
    http.ListenAndServe(":8080", nil)
}

如果我运行服务器,然后在此url上将路径更改为示例:http://0.0.0.0:8080/otherpath,它将仍然显示handler_over的功能。它将显示一个字符串:This is my server.Hello

我该怎么办,所以当您将URL更改为未知路径(不是路径)时,它将显示错误,例如404页面未找到。从意义上说,服务器上只有两个路径可以识别:“ /”路径和“ / events”路径。

注意 这个问题以前可能已经被问过了,但是我不知道该怎么问。任何帮助或重定向到答案将不胜感激。

1 个答案:

答案 0 :(得分:0)

func handler_over(w http.ResponseWriter, r *http.Request) {
    // The "/" pattern matches everything, so we need to check
    // that we're at the root here.
    if r.URL.Path != "/" {
        http.NotFound(w, req)
        return
    }
    fmt.Fprintf(w, "This is my server. Hello.")
}