Comments (9)
I was thinking about custom context types:
ctx := &MyCustomAppContext{} // implements context.Context interface
router := chi.NewRouter(ctx)
func Handler(w http.ResponseWriter, r *http.Request) {
ctx := r.Context().(*MyCustomAppContext)
// I can use custom methods/helpers defined on the *MyCustomAppContext type now..
// this means... saving a lot of boiler plate and type conversions
sessionUser := ctx.SessionUser()
session := ctx.Session() // instead of session, ok := ctx.Value("session").(*Session)
db := ctx.DBSession() // DB connection assigned from a middleware?
w.Write([]byte("yay"))
}
from chi.
@cyx yea I've gone back and forth with this one myself. I've implemented it, then removed it, then thought perhaps we should bring it back.
can you describe your use case for a base context? what would you use it for?
from chi.
For our usecase, the most important part is cancellation.
ctx, cancel := context.WithCancel(context.Background())
graceful.AddSignal(syscall.SIGTERM)
graceful.PostHook(cancel)
// more code here that adds on to context.
FWIW we were originally using github.com/guregu/kami. We definitely love a working PR we have moving to chi, and this is the only piece that felt weird to me TBH.
from chi.
@cyx that isn't actually a reliable solution to a graceful shutdown of your servers. A cancelation signal will cancel all in-process goroutines. What is actually necessary is a signal on the context that tells the listeners to stop any further processing, but to finish up their work. See #58
from chi.
@cyx let me know if you get any success or some other ideas on how to approach it though
from chi.
@pkieltyka do you sit in any irc / slack channel? Would be interested to talk about this in detail.
from chi.
@cyx id love to get into it, but I'm under a pile of work onboarding a bunch of customers this week
from chi.
btw, here is a PR to add this functionality #92
I'll be adding a _examples/graceful example too to this PR that uses the new https://github.com/goware/valve package to manage graceful shutdowns, utilizing a base context
from chi.
done in a526d0c
from chi.
Related Issues (20)
- bug: HandlerFunc does not support HTTP methods in patterns like #897
- Huma not respecting API Gateway path? HOT 1
- r.With(paginate) in documentation HOT 1
- When registering a custom Middleware and a custom NotFoundHandler, both are executed when a 404 URL is loaded HOT 1
- Custom middleware recovery having to be duplicated HOT 1
- How to pass information back to middleware? HOT 3
- v5 response does not implement http.Hijacker HOT 2
- High CPU usage by chi.setPathValue HOT 2
- middleware.Compress should by default compress `text/xml`, `application/xml`, and arguably `text/*` HOT 3
- Special characters added to pages due to compression on v5.0.13 HOT 11
- Coraza WAF Middleware
- weird conflict of router HOT 2
- How to write 500 status code after `basicWriter.Write` returns error?
- Not all middlewares are present in `chi.Walk`
- Wildcard matching with regex pattern is not correctly parsing the path values HOT 1
- Chi router not invoking custom not found handler
- OpenTelemetry Middleware Proposal HOT 2
- Broken chi.URLParam return empty string
- Sub-routers returning 404 when using `middleware.SupressNotFound` on parent router
- Middleware derived from Goji seems to be missing copyright notices HOT 6
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 chi.