#요약

localhost로 node 작업 중, 화면이 나오지 않고 콘솔창에 GET / - - ms - - 메세지를 보게 되면, 미들웨어 함수안에 next()를 호출(입력)했는지 확인한다

#배운점

1. 미들웨어는 위에서 부터 순서대로 시작하기 때문에 "그 위치"가 중요하다.

2. 미들웨어는 next()호출로 다음 미들웨어를 실행한다.

3. 응답(res.send()/res.render())이 없을 경우 Node는 TCP 커넥션을 끊어버린다.

#현상

localhost로 브라우저 요청 시, 페이지가 무한 로딩중이고
화면에 아무런 출력물이 없다. 미들웨어 morgan은 콘솔창에
" GET / - - ms - - " 로그를 남긴다.
인터넷을 재시작하거나 컴퓨터 재부팅을 해도 상황은 여전하다.

#검색

  1. https://github.com/expressjs/morgan/issues/121
  2. https://stackoverflow.com/questions/39728057/no-request-status-in-node-js-morgan-logging

[위 링크 중, 코멘트]

  1. GET / - - ms - - essentially means that you never sent a response before Node.js killed the TCP connection for idling too long
    "Check to make sure that each request is sent a response!"
  1. Another thing to check is if you don't send a response you specifically call next(). That's when I see it in my app (I've just learned that's what it means in my project), when I'm chaining say a param to another route call, if I get those logs with no response, I forgot the next in the param controller method
  1. I would try to explain the probable cause in simple terms as I too came across the same problem sometime back. The issue was that for a certain condition in code, the line "res.send" wasn't getting executed.Therefore, the response that is being awaited on the client side was getting timed out. And hence, in the logger, it showed /GET docs - - ms - - as we didn't send anything in response.

#증상 원인

응답(response)을 보내지 않으면[send() 혹은 render()] nodejs가 TCP 커넥션을 끊기 때문에 무한로딩을 일으킨다.

#해결

next()를 호출하지 않아 발생함 문제였음,

작성중인 미들웨어 함수에 next()를 호출해 문제 해결

#복기

당시 작성 중인 "다음" 미들웨어가 라우터 함수였다.
next()를 호출하지 않아, 그 다음 미들웨어 함수(라우터)가 실행되지 못했다.