Comments (6)
You can not set headers after the response body (at least 1 byte) is sent to the client. This is because headers come before body in HTTP response. If your headers depend on the response body (etag
header?) you probably can not avoid buffers in case the body is dynamic.
from echo.
You could use err = tmpl.Execute(c.Response(), nil)
instead of err = tmpl.Execute(c.Response().Writer, nil)
as echo.Response
implements Writer
interface.
With err = tmpl.Execute(c.Response(), nil)
beforeFuncs will be called.
In regards c.Response().Writer,
This is working as intended. Before
functions are called only once (when response has not been "commited"), at the time when the headers are written to the response. With c.Response().Writer,
you are accessing original writer that echo.Response
is meant to wrap thus forgiving all "magick" that Echo response has.
Here:
Lines 54 to 65 in 584cb85
from echo.
p.s. create your templates out of handler if they are not changing. That way you avoid overhead of parsing that template on each request
// avoid parsing template in every request
tmpl := template.Must(template.New("htmlTemplate").Parse("Hello Bug!"))
e.GET("/bug", func(c echo.Context) error {
if err := tmpl.Execute(c.Response(), nil); err != nil {
c.Logger().Error(err)
return err
}
return nil
})
from echo.
Thank you.
Is saving it first to bytes.Buffer
bad? More saving and copying?
Which method between the "workaround" method and the solution you posted do you think is the "best practice"?
from echo.
Okay, you second argument to tmpl.Execute
is nil. Does this probably means that you are outputting totally static HTML? nothing is there changing? If it is so then you do not need templates at all. Just write your HTML string out and you are good to go.
templates are most useful for cases when your output is dynamic. Although maybe you are using templates for convenience because they have ability to "render" subtemplates/fragments into single output. In that case templates are useful.
from echo.
The code was a minimal code to reproduce the bug.
But I will render it to a buffer then use the built-in response function.
I had some issues when writing directly to the response writer and then setting the header manually because the header had already been written once.
from echo.
Related Issues (20)
- echo v4 websocket client closed, program exited HOT 3
- router not setting ContextKeyHeaderAllow for group, causing cors preflight to not work HOT 6
- Static file has wrong body returned when using a custom HTTP Error Handler and complex paths HOT 2
- QueryParams seem to override formValues HOT 3
- DefaultHTTPErrorHandler does not log HOT 3
- Support Casbin Authorization Middleware HOT 1
- Echo response object calls flush on unflushable objects HOT 7
- Feature request: support Yaml responses transparently. HOT 1
- static middleware: path ist unescaped twice for file names, leading to not downloadable content
- CSRF middleware form lookup consumes all the request body HOT 1
- Question: How can I serve content from static HTML files using URLs that have no '.html' extension HOT 5
- Omitempty in form HOT 1
- Return error if reverse() does not find a match HOT 9
- How to read a path param with echo that can contain slashes? HOT 3
- Unclear behaviour of `*` in routes HOT 7
- middleware.CORSConfig can not be configured per path HOT 3
- Is there any plan to facilitate responses in the Protobuf data format? HOT 2
- When `c.bind()` fails with a type error on POST'd form data the `inputfieldname` is not available HOT 3
- Using static middleware, does not raise handler at '/*' path HOT 13
- proposal: Micro-optimization for better memory utilization HOT 4
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from echo.