diff --git a/ctx.go b/ctx.go index 5303d98f..15f9b378 100644 --- a/ctx.go +++ b/ctx.go @@ -12,11 +12,11 @@ import ( "errors" "fmt" "io" - "io/ioutil" "log" "mime/multipart" "net/http" "net/url" + "os" "path/filepath" "regexp" "strconv" @@ -752,14 +752,21 @@ func (ctx *Ctx) Render(name string, bind interface{}) (err error) { } else { // Render raw template using 'name' as filepath if no engine is set var tmpl *template.Template - var raw []byte + raw := bytebufferpool.Get() + defer bytebufferpool.Put(raw) // Read file - if raw, err = ioutil.ReadFile(filepath.Clean(name)); err != nil { + f, err := os.Open(filepath.Clean(name)) + if err != nil { + return err + } + if _, err = raw.ReadFrom(f); err != nil { + return err + } + if err = f.Close(); err != nil { return err } // Parse template - // tmpl, err := template.ParseGlob(name) - if tmpl, err = template.New("").ParseGlob(getString(raw)); err != nil { + if tmpl, err = template.New("").Parse(raw.String()); err != nil { return err } // Render template diff --git a/ctx_test.go b/ctx_test.go index d960ad9d..9a7e8fdd 100644 --- a/ctx_test.go +++ b/ctx_test.go @@ -1054,6 +1054,24 @@ func Test_Ctx_Redirect(t *testing.T) { // // TODO // } +// go test -run Test_Ctx_Render_Go_Template +func Test_Ctx_Render_Go_Template(t *testing.T) { + t.Parallel() + file, err := ioutil.TempFile(os.TempDir(), "fiber") + utils.AssertEqual(t, nil, err) + defer os.Remove(file.Name()) + _, err = file.Write([]byte("template")) + utils.AssertEqual(t, nil, err) + err = file.Close() + utils.AssertEqual(t, nil, err) + app := New() + ctx := app.AcquireCtx(&fasthttp.RequestCtx{}) + defer app.ReleaseCtx(ctx) + err = ctx.Render(file.Name(), nil) + utils.AssertEqual(t, nil, err) + utils.AssertEqual(t, "template", string(ctx.Fasthttp.Response.Body())) +} + // go test -run Test_Ctx_Send func Test_Ctx_Send(t *testing.T) { t.Parallel()