我是 Golang 的新手。我需要显示图像。我尝试使用 Gorilla/mux。 但我仍然收到错误:404。我的事情可能是我使用 mux 代码的地方不正确。
主要功能
package main
import (
"net/http"
"mytestsite/handlers"
"log"
"github.com/gorilla/mux"
)
func main() {
r := mux.NewRouter()
r.HandleFunc("/register", handlers.RegisterHandler)
r.HandleFunc("/sucess", handlers.Sucess)
r.HandleFunc("/login", handlers.Login)
r.HandleFunc("/list", handlers.ViewList)
r.HandleFunc("/logout", handlers.Logout)
r.HandleFunc("/edit", handlers.Edit)
r.HandleFunc("/EditnList", handlers.EditnList)
r.HandleFunc("/notvalid", handlers.NotValid)
r.HandleFunc("/delete", handlers.Delete)
r.HandleFunc("/listchoose", handlers.ListChoose)
r.HandleFunc("/email", handlers.SendEmail)
images := http.StripPrefix("/images/", http.FileServer(http.Dir("./frontend/images/")))
r.PathPrefix("/images/").Handler(images)
if err := http.ListenAndServe(":8181", r); err != nil {
log.Fatal("http.ListenAndServe: ", err)
}
}
将数据传递给 html 的函数
func ViewList(w http.ResponseWriter, r *http.Request) {
viewModel:=viewmodels.RegisterViewModel{}
user:=models.User{}
dbResults := user.ViewDB()
//Cookies below
cookieCheck := getCookie(r)
if (cookieCheck != ""){
err:=GetTemplate("list").Execute(w,dbResults)
if err!=nil{
panic(err)
}
} else {
viewModel.ErrorMessage="Please Enter Email Id and Password.."
err:=GetTemplate("login").Execute(w,viewModel)
if err!=nil{
panic(err)
}
}
}
在html文件中的使用
<td><img src="{{.Photo}}" alt="{{.Photo}}" style="width:50px;height:50px;"/></td>
{{.Photo}} 的值通过以下代码存储到 Db:
ctime := time.Now()
uploadedfile := "frontend/images"+ctime.Format("20060102150405")+".jpg"
out, err := os.Create(uploadedfile)
{{.Photo}} 的 SO 值如下所示
frontend/images/20160202171411.jpg
最佳答案
您在这里混用了两个路由器。
首先,http 包有一个名为:DefaultServeMux 的包全局默认处理程序。 .这是 http.ServeMux 的一个实例
当您调用 http.HandleFunc 时, DefaultServeMux 是该处理程序注册的地方 ( source )
当您调用 http.ListenAndServe 时,第二个参数是用于处理指定端口上的 HTTP 请求的处理程序。
如果您将 nil 作为处理程序传递(就像您在代码中所做的那样),您是在告诉 http 服务器使用 http.DefaultServeMux
Gorilla mux是 http.ServeMux 的替代品。通常,您使用其中之一。
在您的例子中,您正在使用 gorilla mux 注册您的文件服务器,然后告诉 http.ListenAndServe 使用 http.DefaultServeMux(通过省略处理程序)。
您可以使用标准 http 库的默认 mux(通过:http.Handle)注册您的文件服务,或者更改您的函数映射以使用您的 Gorilla mux(通过:r.HandlerFunc)注册。
如果您选择使用 Gorilla(更灵活的解决方案,但对于您的示例代码而言并不是真正必要的),则将其而不是 nil 传递给 ListenAndServe。
关于 gorilla /mux : Image not displaying,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35171293/
我在使用Gorillasession处理程序在Golang中持久保存session时遇到了问题。类似的问题(未解决!)已在其他堆栈溢出问题中提出(此处:Sessionsvariablesingolangnotsavedwhileusinggorillasessions和此处:cannotgetgorillasessionvaluebykey)。这非常可怕,因为看起来1)不仅仅是我2)目前似乎没有解决方案3)GorillaSessions包可能从根本上被破坏了。这里是更详细的问题:我可以在登录时设置session没有问题。但是,在我登录并向后端发出另一个请求后,session值不会持久化
我在使用gorilla/mux和gorm的方法发布时遇到问题,我想在bodyraw中请求,但是当我执行我的程序时我的代码出错,为什么我的代码出错?我仍然不明白如何使用gorilla/mux和gorm在正文中使用请求,如何在golang中使用mux和gorm制作帖子表单?我的错误是:packagemainimport("encoding/json""fmt""github.com/gorilla/mux""github.com/jinzhu/gorm"_"github.com/jinzhu/gorm/dialects/mssql""log""net/http""strconv""time
当您在Golang中创建funcHandler并使用GorillaMux时,我知道您可以通过调用Mux.Vars来访问特定的输入变量。但是,当您以JSON格式存储数据时,我不确定它是如何工作的,部分原因是我不确定Mux.Vars()是如何工作的。所以,我想知道如何在输入funcHandler时列出Mux.Vars()存储的所有变量,以及如何解析存储在URL中的JSON(即/data?name="bill"&value="red",我想在其中找到名称和值键的值)。 最佳答案 列出所有的GorillaMux:fork,v:=rangem
错误信息是:app.go:9:3:cannotfindpackage"github.com/gorrila/mux"inanyof:/usr/local/Cellar/go/1.10.3/libexec/src/github.com/gorrila/mux(from$GOROOT)/Users/myname/go/src/github.com/gorrila/mux(from$GOPATH)我知道GOROOT用于安装时附带的编译器工具,所以我不确定为什么它会在那里寻找mux。但是我在为go代码创建的目录的第二个位置确实看到了mux。我知道有人问过这个问题oncebefore我尝试按照该
这是我的代码,它试图显示在使用mux之前可以正常工作的base64图像。我在使用mux之前使用过httphandlefunc,这里我想使用mux并获取key的值。packagemainimport("fmt""net/http""strconv"base64"encoding/base64""log""io""io/ioutil""os""github.com/gorilla/mux")var(Trace*log.LoggerInfo*log.LoggerWarning*log.LoggerError*log.Logger)funcInit(traceHandleio.Writer,i
这是我第一次编写任何golang代码并构建一个基本的webapi。我想做的是每当在"/"路径上收到请求时,我想将mux.Walk()的所有路径写到我的ResponseWriter。由于Walk函数采用匿名函数,我如何让处理程序等到所有路径都计算完毕并输入到我可以发送的数组中?如果不等待,是否有更有效的方法? 最佳答案 SincetheWalkfunctiontakesananonymousfunction,howcanImakethehandlerwaituntilallthepathsarecalculatedandentered
我想在mux.Vars()中设置一个值,MatcherFunc返回true,然后handlerFun可以访问读取。但是当mux.Vars(request)["key"]="value"时,对nil映射中的条目的panic分配如何设置值:domainRouter:=router.MatcherFunc(func(request*http.Request,match*mux.RouteMatch)bool{ifisOk{mux.Vars(request)["key"]="value"returntrue}returnfalse}).Subrouter() 最佳答
我开始使用golang和Angular2构建一个常规的网络应用程序,最重要的是我试图在auth0.com的帮助下保护我的登录.我从here下载快速入门代码并尝试运行代码,它运行了一段时间,然后在我下次运行它时,再也找不到/tmp/session文件了。以下是auth0.com提供的代码的一些基本概念。1。初始化gorillasession文件系统存储2。然后开始认证过程下面提供了代码app.govar(Store*sessions.FilesystemStore)funcInit()error{Store=sessions.NewFilesystemStore("",[]byte("s
我是Golang的新手,我正在阅读某人使用gorilla/mux编写的API代码,我遇到了这段代码。funcheroGet(whttp.ResponseWriter,r*http.Request){varIDstringvarOkboolifID,Ok=mux.Vars(r)["ID"];!Ok{//dosomething}我无法理解Ok在这种特定情况下的作用以及何时触发!Ok。请注意,此函数是GET端点。(r.HandleFunc("/hero/{ID}",heroGet).Methods("GET")) 最佳答案 我假设您使用的
我的程序在每次一个连接的情况下运行良好,但在并发连接的情况下就不行。我需要由一个函数呈现所有连接,该函数将包含我在服务中需要的所有数据,但效果不佳,因此我用下面的简单代码进行了说明:packagemainimport("encoding/json""fmt""github.com/gorilla/mux""github.com/rs/cors""net/http""reflect""time")varOutstruct{Codeint`json:"status"`Message[]interface{}`json:"message"`}funcClear(vinterface{}){p