无论 `app.ServeFiles` 定义在何时何处,总是应该最后访问它
Steps to Reproduce the Problem
I added nested routes without groups' names like categories and products. actions/app.go
...
cr := &CategoriesResource{}
...
pr := &ProductsResource{}
a.GET("/{category_name}", pr.List)
a.GET("/{category_name}/{product_name}", pr.Show)
...
app.ServeFiles("/", assetsBox)actions/render.go
var assetsBox = packr.NewBox("../public")Then, I wanted to serve 'robots.txt' files in public directory but server even couldn't serve assets files in 'public/assets' directory because it tried to fetch a category record named 'robots.txt' or 'assets' which are placed at 'category name' of routes. So I reverted 'app.go' and 'render.go' like under Buffalo v0.12.4 (which supports public folder's files like robots.txt) and render with plain on products' List action. actions/app.go
app.ServeFiles("/assets", assetsBox)
...
cr := &CategoriesResource{}
...
pr := &ProductsResource{}
a.GET("/{category_name}", pr.List)
a.GET("/{category_name}/{product_name}", pr.Show)
...actions/render.go
var assetsBox = packr.NewBox("../public/assets")actions/products.go
func (v ProductsResource) List(c buffalo.Context) error {
if c.Param("category_name") == "robots.txt" {
return c.Render(200, r.Plain("robots.txt"))
}
...
}Expected Behavior
Expect the server to serve files on public directory like robots.txt or ads.txt properly even without groups on routes. So I want a feature to pre-define public directory files to serve files before matching routes params. Elixir web framework Phoenix did it like below.
# Serve at "/" the static files from "priv/static" directory.
#
# You should set gzip to true if you are running phoenix.digest
# when deploying your static files in production.
plug Plug.Static,
at: "/", from: :example, gzip: false,
only: ~w(css fonts images js icons favicon.ico robots.txt ads.txt sitemaps)Actual Behavior
The server can't distinguish static files on public directory and routes params.
Info
### Buffalo Version v0.12.4 ### App Information Pwd=C:\Users\byungjik\go\src\example Root=C:\Users\byungjik\go\src\example GoPath=C:\Users\byungjik\go Name=example Bin=bin\example.exe PackagePkg=example ActionsPkg=example/actions ModelsPkg=example/models GriftsPkg=example/grifts VCS=git WithPop=true WithSQLite=false WithDep=false WithWebpack=true WithYarn=true WithDocker=true WithGrifts=true ### Go Version go version go1.9.1 windows/amd64 ### Go Env set GOARCH=amd64 set GOBIN= set GOEXE=.exe set GOHOSTARCH=amd64 set GOHOSTOS=windows set GOOS=windows set GOPATH=C:\Users\byungjik\go set GORACE= set GOROOT=C:\Go set GOTOOLDIR=C:\Go\pkg\tool\windows_amd64 set GCCGO=gccgo set CC=gcc set GOGCCFLAGS=-m64 -mthreads -fmessage-length=0 set CXX=g++ set CGO_ENABLED=1 set CGO_CFLAGS=-g -O2 set CGO_CPPFLAGS= set CGO_CXXFLAGS=-g -O2 set CGO_FFLAGS=-g -O2 set CGO_LDFLAGS=-g -O2 set PKG_CONFIG=pkg-config ### Node Version v8.11.3 ### NPM …内容来源: gobuffalo/buffalo