Golang中404页面未找到的处理方法

Golang中404页面未找到的处理方法 我正在尝试制作一个注册页面。我不知道代码中有什么错误,每次运行本地主机时都会显示404错误。

这是我的代码 -> https://github.com/vashish1/test

任何帮助都将不胜感激。

4 回复

查看这个项目中的注册页面,似乎正是您要找的。

更多关于Golang中404页面未找到的处理方法的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


我进行了这些修改,但显示以下错误。

无法将 handlers.SignUpHandler(&env)(类型为 http.Handler 的值)作为 func(http.ResponseWriter, *http.Request) 类型的值用于 r.HandleFunc 参数中

我认为你需要修改分配这个特定路由的代码:

r := mux.NewRouter()
r.HandleFunc("/", handlers.HomeHandler)
r.HandleFunc("/signup", handlers.SignUpHandler(&env)).Methods("GET", "POST")
http.Handle("/", r)

在查看你的代码后,我发现了几个可能导致404错误的问题。以下是具体的解决方案和示例代码:

主要问题分析

  1. 路由未正确配置 - 你的路由处理器没有正确映射到注册页面
  2. 静态文件服务缺失 - HTML模板文件无法被正确访问
  3. 端口和服务配置问题

修复后的完整代码示例

package main

import (
    "html/template"
    "log"
    "net/http"
)

func main() {
    // 设置静态文件服务
    fs := http.FileServer(http.Dir("./static"))
    http.Handle("/static/", http.StripPrefix("/static/", fs))

    // 注册路由
    http.HandleFunc("/", homeHandler)
    http.HandleFunc("/register", registerHandler)
    http.HandleFunc("/register-process", registerProcessHandler)

    log.Println("服务器启动在 http://localhost:8080")
    log.Fatal(http.ListenAndServe(":8080", nil))
}

func homeHandler(w http.ResponseWriter, r *http.Request) {
    if r.URL.Path != "/" {
        http.NotFound(w, r)
        return
    }
    
    tmpl, err := template.ParseFiles("templates/index.html")
    if err != nil {
        http.Error(w, "模板文件未找到", http.StatusInternalServerError)
        return
    }
    tmpl.Execute(w, nil)
}

func registerHandler(w http.ResponseWriter, r *http.Request) {
    tmpl, err := template.ParseFiles("templates/register.html")
    if err != nil {
        http.Error(w, "注册页面模板未找到", http.StatusInternalServerError)
        return
    }
    tmpl.Execute(w, nil)
}

func registerProcessHandler(w http.ResponseWriter, r *http.Request) {
    if r.Method != "POST" {
        http.Error(w, "方法不允许", http.StatusMethodNotAllowed)
        return
    }
    
    // 处理注册逻辑
    username := r.FormValue("username")
    email := r.FormValue("email")
    password := r.FormValue("password")
    
    // 这里添加你的注册逻辑
    log.Printf("用户注册: %s, 邮箱: %s", username, email)
    
    // 重定向到成功页面或返回响应
    http.Redirect(w, r, "/success", http.StatusSeeOther)
}

项目目录结构

确保你的项目结构如下:

your-project/
├── main.go
├── static/
│   ├── css/
│   │   └── style.css
│   └── js/
│       └── script.js
└── templates/
    ├── index.html
    ├── register.html
    └── success.html

注册页面模板示例 (templates/register.html)

<!DOCTYPE html>
<html>
<head>
    <title>用户注册</title>
    <link rel="stylesheet" href="/static/css/style.css">
</head>
<body>
    <div class="container">
        <h1>用户注册</h1>
        <form action="/register-process" method="POST">
            <div>
                <label>用户名:</label>
                <input type="text" name="username" required>
            </div>
            <div>
                <label>邮箱:</label>
                <input type="email" name="email" required>
            </div>
            <div>
                <label>密码:</label>
                <input type="password" name="password" required>
            </div>
            <button type="submit">注册</button>
        </form>
    </div>
</body>
</html>

自定义404处理

添加自定义404页面处理:

func notFoundHandler(w http.ResponseWriter, r *http.Request) {
    w.WriteHeader(http.StatusNotFound)
    tmpl, err := template.ParseFiles("templates/404.html")
    if err != nil {
        http.Error(w, "页面未找到", http.StatusNotFound)
        return
    }
    tmpl.Execute(w, nil)
}

// 在main函数中添加
http.HandleFunc("/404", notFoundHandler)

运行修复后的代码,访问 http://localhost:8080/register 应该能正常显示注册页面。确保所有文件路径正确,端口8080未被占用。

回到顶部