多个Dir服务不起作用

时间:2017-04-25 02:51:32

标签: go

以下代码中的任何错误?以下代码无法使用多个目录服务。当我访问localhost:9090 / ide时,服务器将返回404错误。

package main

import (
    "log"
    "net/http"
)

func serveIDE(w http.ResponseWriter, r *http.Request) {
    http.FileServer(http.Dir("/home/user/ide")).ServeHTTP(w, r)
}

func serveConsole(w http.ResponseWriter, r *http.Request) {
    http.FileServer(http.Dir("/home/user/console")).ServeHTTP(w, r)
}

func main() {
    http.HandleFunc("/ide", serveIDE)         
    http.HandleFunc("/console", serveConsole) 
    err := http.ListenAndServe(":9090", nil)  
    if err != nil {
        log.Fatal("ListenAndServe: ", err)
    }
}

当我改变这样的代码时,

http.HandleFunc("/", serveIDE)

它会像我预期的那样工作。

1 个答案:

答案 0 :(得分:3)

使用http.FileServer的一个问题是请求路径用于构建文件名,因此如果您从除root之外的任何地方提供服务,则需要将路由前缀去除到该处理程序

标准库包含http.StripPrefix的有用工具,但仅适用于http.Handler,而不适用http.HandleFunc,因此要使用它,您需要调整{{1}转到HandleFunc

这是一个应该做你想要的工作版本。请注意,wHandler只是从Handler方法到HttpFunc接口的适配器:

Hander