2017-02-17 1 views
0

Node.js 앱을 최근에 변경 한 후에 서버가 응답을 멈춘 것으로 나타났습니다. 나는 범인을 못 박았지만 확인하고 싶다.Node.js 콜백 블록이없는 async 함수가 메인 스레드입니까?

사용 후 파일 시스템에서 파일을 제거하는 기능이 있으므로 파일 삭제의 응답을 신경 쓰지 않아 방금 무시합니다.

uploadFile(req, res, next) { 
    // Do something 
    removeFileAtPath(path, (error) => { 
    if (error) { /* handle error */ } 
    res.send(someResponse) 
    }); 
} 

을하지만 신경 쓰지 않기 때문에이이 미들웨어 함수에서 호출되는

removeFileAtPath(filePath, callback) { 
    fs.unlink(filePath, (err) => { 
    if (callback) { 
     return callback(err) 
    } 
    }); 
} 

, 그래서 일반적으로 다음과 같이 호출 할 것이다 :

그래서 나는이 기능을 가지고 말할 수 함수 응답,이 같은 removeFileAtPath 함수를 호출 :

uploadFile(req, res, next) { 
    // Do something 
    removeFileAtPath(path); // No callback passed in here 
    res.send(someResponse); 
} 

무선 이런 식으로 메인 루프를 차단할 것인가 아니면 내 문제가 될 것 같은가?

+2

아니요 루프를 차단하지 않으시겠습니까? –

+1

모든 이음매는 괜찮습니다. 문제는 다른 곳에서 생각합니다. – dumitru

+0

맞습니다. 콜백하지 않는 것이 원인이 아닙니다. 데이터베이스 연결 풀이 고갈되면 전체 노드 프로세스를 정지시키는 것으로 발견 된'// Do something' 부분에서 데이터베이스 연결이 누출되었습니다. 이것에 대한 자세한 내용은 여기에 있습니다 : http://stackoverflow.com/a/42319762/379226 – Inn0vative1

답변

0

봅니다 미들웨어

+0

이미'res.send (someResponse)' –

0

아니, 차단하지 않습니다의 끝 부분에 다음() 함수를 호출합니다 - 당신은 메인 스레드와 이벤트 루프를 의미 경우 - fs.unlinkSync은 그런 의미에서 차단하는 것입니다.

또는 다음 미들웨어를 호출해야합니다. 그렇지 않으면 스레드 및 이벤트 루프가 일반적인 의미로 차단되지 않더라도 요청이 처리되지 않도록 "차단"합니다. 서버는 여전히 다른 요청 및 이벤트를 처리 할 수 ​​있습니다.