在Chi中间件中通过http.request传递上下文时出现报错
Chi中间件传递数据时类型转换错误的解决方法
你当前的代码直接基于context.Background()创建新上下文,覆盖了原请求中Chi框架自带的*chi.Context,导致后续处理逻辑找不到所需的上下文实例,抛出类型转换错误。
错误代码:
ctx := context.WithValue(context.Background(), int32(0), company) next.ServeHTTP(w, r.WithContext(ctx)) return
报错信息:
interface conversion: interface {} is nil, not *chi.Context
修正后的代码:
// 基于原请求的context创建新上下文,保留Chi的上下文数据 ctx := context.WithValue(r.Context(), int32(0), company) next.ServeHTTP(w, r.WithContext(ctx)) return
原因说明:
Chi框架会将自身的*chi.Context存储在HTTP请求的context中,供后续中间件和处理函数使用。如果直接用context.Background()创建全新上下文,会丢失原请求里的Chi上下文数据,导致后续代码尝试从nil中转换为*chi.Context时失败。正确的做法是基于原请求的r.Context()来扩展上下文,这样既保留了Chi的上下文,又能添加自定义数据。
内容的提问来源于stack exchange,提问作者Anirudh Kumar Aheer
相关产品推荐
相关产品推荐

