gin 프레임 워크를 사용하여 Elastic에서 데이터를 가져 오는 Api를 구축하고 있습니다. 문제는 응용 프로그램을 실행할 때 첫 번째 요청에서 성공적으로 응답을 얻지 만 후속 요청에서 오류가 발생한다는 것입니다.
Error parsing the response body: EOF
탄력적 인 구성 :
var cfg = elasticsearch.Config{
Password: GetConnectConfig().esPassword,
Username: GetConnectConfig().esUserName,
Addresses: GetConnectConfig().esHost,
Logger: &estransport.ColorLogger{
Output: os.Stdout,
}
내 요청 처리기 함수는 다음과 같습니다.
func Search() gin.HandlerFunc {
client, err := elasticsearch.NewClient(cfg)
if err != nil {
log.Fatalf("elastic configuration failed %s", err)
}
res, err := client.Search(
client.Search.WithIndex(Index_Name),
client.Search.WithSize(10),
client.Search.WithPretty(),
)
if err != nil {
log.Fatalf("elastic failed to respond %s", err)
}
return func(c *gin.Context) {
r := map[string]interface{}{}
if err := json.NewDecoder(res.Body).Decode(&r); err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": err})
log.Fatalf("Error parsing the response body: %s", err) // Error
} else {
for _, hit := range r["hits"].(map[string]interface{})["hits"].([]interface{}) {
log.Printf(" * ID=%s, %s", hit.(map[string]interface{})["_id"], hit.(map[string]interface{})["_source"])
}
c.JSON(http.StatusOK, "success")
}
}
}
내가 말했듯이 응용 프로그램을 실행할 때마다 첫 번째 요청에서만 응답을 얻을 수 있습니다. 여기서 오류의 원인이 무엇인지 잘 모르겠습니다.
또한 다음을 추가하여 검색 후 응답 본문을 닫으려고 시도했습니다.
defer res.Body.Close()
하지만 이제 다음과 같은 오류가 발생합니다.
Error parsing the response body: http2: response body closed
defer res.Body.Close()
func (c * gin.Context) {} yo 안에 있어야합니다. 검색 초기화를 func 내부로 이동하고 내부에서 닫을 수 있으며 클라이언트는 여기에 종속성으로 삽입 될 수 있습니다.
return func(c *gin.Context) {
res, err := client.Search(
client.Search.WithIndex(Index_Name),
client.Search.WithSize(10),
client.Search.WithPretty(),
)
defer res.Body.Close()
}
}
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다