Go web endpoint tidak dapat mencari fail index.html statik

WBOY
Lepaskan: 2024-02-09 11:18:17
ke hadapan
1135 orang telah melayarinya

Go Web端点找不到静态index.html文件

editor php Banana mendapati bahawa apabila menggunakan bahasa Go untuk membangunkan aplikasi web, kadangkala kami menghadapi masalah biasa: apabila kami cuba mengakses titik akhir web, kami menerima ralat 404, menunjukkan bahawa indeks statik tidak dapat ditemui .html fail. Soalan ini boleh mengelirukan bagi pembangun, terutamanya untuk pemula. Jadi, bagaimana kita harus menyelesaikan masalah ini? Seterusnya, kami akan memperkenalkan penyelesaian secara terperinci untuk membantu anda menyelesaikan masalah ini dengan lancar.

Kandungan soalan

Ini kod saya:

package main

import (
    "fmt"
    "log"
    "net/http"
)

const customport = "3001"

func main() {
    fileserver := http.fileserver(http.dir("./static"))
    port:= fmt.sprintf(":%s", customport)
    http.handle("/", fileserver)

    fmt.printf("starting front end service on port %s", port)
    err := http.listenandserve(port, nil)
    if err != nil {
        log.panic(err)
    }
}
Salin selepas log masuk

Folder peringkat atas ialah microservices dan ditetapkan sebagai ruang kerja pergi. Perkhidmatan web ini akan menjadi salah satu daripada banyak. Ia terletak dalam folder berikut:

microservices
 |--frontend
    |--cmd
       |--web
          |--static
             |--index.html
       |--main.go
Salin selepas log masuk

Saya berada dalam folder perkhidmatan mikro peringkat atas dan saya memulakannya dengan: go run ./frontend/cmd/web。它启动正常,没有错误。但是当我转到 chrome 并输入 http://localhost:3001 时,我得到 404 页面未找到。即使 http://localhost:3001/index.html 也会给出 404 页面未找到。我刚刚学习 go,不知道为什么找不到 ./static folder?

Penyelesaian

Mengikut arahan anda, laluan mestilah ./frontend/cmd/web/static, bukan hanya ./static. Itu bukan mudah alih; laluan berubah dengan direktori kerja.

Pertimbangkan membenamkan direktori statik. Jika tidak, anda perlu membuat laluan boleh dikonfigurasikan (bendera, pembolehubah persekitaran, dll.)

Kelemahan pembenaman ialah anda perlu membina semula program selepas membuat sebarang perubahan pada fail statik.

Anda juga boleh menggunakan kaedah hibrid. Jika bendera (atau lain-lain) ditetapkan, gunakan itu untuk berkhidmat dari cakera, jika tidak gunakan sistem fail terbenam. Bendera ini mudah semasa pembangunan, dan sistem fail terbenam menjadikan penggunaan mudah kerana anda hanya perlu menyalin binari program.

package main

import (
    "embed"
    "flag"
    "io/fs"
    "net/http"
    "os"
)

//go:embed web/static
var embeddedAssets embed.FS

func main() {
    var staticDir string

    flag.StringVar(&staticDir, "static-dir", staticDir, "Path to directory containing static assets. If empty embedded assets are used.")
    flag.Parse()

    var staticFS fs.FS = embeddedAssets
    if staticDir != "" {
        staticFS = os.DirFS(staticDir)
    }

    http.Handle("/", http.FileServer(http.FS(staticFS)))

    // ...
}
Salin selepas log masuk

Atas ialah kandungan terperinci Go web endpoint tidak dapat mencari fail index.html statik. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan