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);
}
무선 이런 식으로 메인 루프를 차단할 것인가 아니면 내 문제가 될 것 같은가?
아니요 루프를 차단하지 않으시겠습니까? –
모든 이음매는 괜찮습니다. 문제는 다른 곳에서 생각합니다. – dumitru
맞습니다. 콜백하지 않는 것이 원인이 아닙니다. 데이터베이스 연결 풀이 고갈되면 전체 노드 프로세스를 정지시키는 것으로 발견 된'// Do something' 부분에서 데이터베이스 연결이 누출되었습니다. 이것에 대한 자세한 내용은 여기에 있습니다 : http://stackoverflow.com/a/42319762/379226 – Inn0vative1