Go Endpoint 不调用处理程序方法

问题描述 投票:0回答:1

我正在使用 Go、HTMX、Templ 作为 TechStack 实现一个小型业余爱好项目。因为我是新手,所以我开始了一个小游乐场并尝试构建一些小型搜索。

现在我面临的问题是,我的处理程序方法在开始时只调用一次:

package main

    import (
        "net/http"
    
        "github.com/go-chi/chi/v5"
    )
    
    func main() {
        router := chi.NewRouter()
    
        router.Get("/", indexHandler().ServeHTTP)
        router.Get("/employee_search", employeeSearchHandler().ServeHTTP)
        http.ListenAndServe(":3000", router)
    }

基本思想是,如果有人在搜索框中搜索,employeeSearchHandler 就会更新 UI 以显示一些结果。

目前处理程序仅生成随机数:

func employeeSearchHandler() *templ.ComponentHandler {
    var employee = rand.IntN(1000)
    fmt.Println(employee)
    return templ.Handler(employee_search.EmployeeResult(employee))
}

我的模板如下所示:

templ EmployeeSearch() {

        <input type="search" name="search" placeholder="Suchen" aria-label="Search" autocomplete="off"
            hx-get="/employee_search"
            hx-trigger="input delay:500ms changed"
            hx-target="#employee_result"
            hx-swap="innerHTML" />
    
        <div id="employee_result">
        </div>
    }

现在我想知道每次我打字并按预期停止 500 毫秒时,我的浏览器都会显示一个新请求,但它总是返回完全相同的 HTML。随机数没有改变。我也在服务器控制台中看到了这种行为。该号码在启动时生成,之后就不再创建。即使 HTMX 事件正在触发,但它只是始终发送回相同的 HTML。

我在这里监督什么?

enter image description here

go htmx
1个回答
0
投票

我明白了:

在 main.go 中,现在看起来像这样:

func main() {
    router := chi.NewRouter()

    //router.Get("/", indexHandler().ServeHTTP)
    router.Get("/employee_search", employeeSearchHandler)
    http.ListenAndServe(":3000", router)
}

所以我不调用方法employeeSearchHandler,只是将func 作为参数传递。然后处理程序本身传递 Response、Request 对象:

func employeeSearchHandler(w http.ResponseWriter, r *http.Request) {
    var employee = rand.IntN(1000)
    templ.Handler(employee_search.EmployeeResult(employee)).ServeHTTP(w, r)
}

这样它就会按照我的预期在每次路由调用上进行更新:)

© www.soinside.com 2019 - 2024. All rights reserved.