首页 > 解决方案 > 在 HTTP 路由器中将未知 URL 路径设置为错误

问题描述

问题:

我很难找到一个问题的答案,这很有可能我不知道如何问。

我在使用 Go Server 时遇到问题。我对 Go 编程没有任何深入的了解,但我确实用它制作了一个服务器。该服务器将显示一个 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 上将路径更改为 example:http: //0.0.0.0:8080/ otherpath,它仍然会显示 handler_over 的函数。这将显示一个字符串:This is my server.Hello

我该怎么做,所以当您将 URL 更改为未知路径(这不是路径)时,它会显示一个错误,例如 404 Page not found。意思是,服务器上只能识别 2 个路径:“/”路径和“/events”路径。

注意 这个问题之前可能已经被问过,但我不知道如何问这个问题。任何帮助或对答案的重定向将不胜感激。

标签: httpgoserverurl-routing

解决方案


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

推荐阅读