엄지월드

undefined:1 Error (Unexpected end of JSON input ) 본문

Node.js

undefined:1 Error (Unexpected end of JSON input )

킨글 2021. 2. 27. 22:50

Unexpected end of JSON input 에러

undefined:1
{"next":"{\"$or\": [{\"deskUpdatedAt\": {\"$gt\": {\"$numberLong\": \"*****\"}}}, {\"$and\": [{\"deskUpdatedAt\": {\"$eq\": {\"$numberLong\": \"1589355174583\"}}}, {\"_id\": {\"$gte\": \"5e*******0
\"}}]}]}","userChats":[{"id":"*****","channelId":"1***5","stateKey":"closed-*****2","userId":"5e*******13","name":"***","state":"closed","pluginId":"15788","sourceUrl":"https
://*****","managerIds":["34479","45580"],"assigneeId":"45580","categoryId":"12230","firstOpenedAt":1589353431492,"openedAt":1589353431492,"firstReplierType":"manager","firstReplierId":"4558
0","firstRepliedAt":1589353439011,"createdAt":1589353431301,"frontMessageId":"5eb******3b09","frontUpdatedAt":1589355091457,"deskMessageId":"5eb*****b1b","deskUpdatedAt":1589355091457,"oneStop":true,
"waitingTime":7519,"avgReplyTime":103752,"totalReplyTime":622517,"replyCount":6,"resolutionTime":1656953,"askedAt":1589355088608,"review":"like","c

SyntaxError: Unexpected end of JSON input
    at JSON.parse (<anonymous>)
    at IncomingMessage.<anonymous> (/workspace/Ch*****er/api/testJira.js:165:22)
    at IncomingMessage.emit (events.js:188:13)
    at IncomingMessage.Readable.read (_stream_readable.js:491:10)
    at flow (_stream_readable.js:957:34)
    at resume_ (_stream_readable.js:938:3)
    at processTicksAndRejections (internal/process/next_tick.js:76:17)
error: Forever detected script exited with code: 1
error: Script restart attempt #551

계속 간헐적으로 undefined:1 에러가 발생했다. 

에러 JSON을 보면 뭔가 짤려있다고는 생각했었는데, 깊게 생각하지 않았었다.

처음엔 서버 상황이 안 좋거나, 몇 번 돌리다 보면 발생하지 않겠다고 생각하고 계속 다시 로딩을 시켜주었는데

갑자기 뭔가 답답함이 생겨서 구글링을 해보았다. 

 

확인을 해보니, 이유는 JSON 데이터가 완전히 수신되기 전에 데이터를 구문 분석하려고 해서 그렇다고 한다.

요청의 .end 메서드 안에 JSON.parse를 넣으면 신기하게도 해당 현상이 발생하지 않게 되었다!! 😍

 

<AS-IS>

var req = https.request(options, function(res){
	res.setEncoding('utf8');
    
    res.on('data', function(chunk){
        var list = JSON.parse(chunk);
        // ... code 
    });
}

 

<TO-BE>

var req = https.request(options, function(res){
	res.setEncoding('utf8');
  	var data = '';
    res.on('data', function(chunk){
        data += chunk;
    });

    res.on('end', function(){
    	var list = JSON.parse(data);
        // ... code 
    }	
}

 

도움이 되셨다면 광고 한번씩 클릭 부탁드립니다 😁

 

 

Comments