이 섹션에서는 비 차단 작업을 구현하기위한 NodeJS 방법에 대해 알아 보겠습니다.
먼저 시작 핸들러를 수정합시다.
코드 사본은 다음과 같습니다.
var exec = require ( "child_process"). exec;
함수 start () {
Console.log ( "요청 핸들러 '시작'이 호출되었습니다.");
var 컨텐츠 = "빈";
exec ( "ls -lah", 함수 (오류, stdout, stderr) {
내용 = stdout;
});
반환 내용;
}
함수 upload () {
Console.log ( "요청 처리기 '업로드'가 호출되었습니다.");
"안녕하세요 업로드"를 반환합니다.
}
Exports.start = 시작;
Exports.upload = 업로드;
이 코드는 새로운 변수 내용을 생성하고 (초기 값은 "빈"), "ls -lah"명령을 실행하고 결과를 컨텐츠에 할당하고 마지막으로 컨텐츠를 반환합니다.
우리는 새로운 node.js 모듈 인 child_process를 도입했습니다. child_process는 간단하고 실용적인 비 차단 작업 (exec)을 구현하는 데 사용됩니다.
그렇다면 exec ()는 무엇을합니까?
node.js에서 쉘 명령을 실행합니다. 위의 예에서는 현재 디렉토리 ( "ls -lah")의 모든 파일을 가져온 다음 /starturl이 요청할 때 파일 정보를 브라우저에 출력하는 데 사용합니다.
서버를 시작하고 "http : // localhost : 8888/start"를 방문하면 페이지의 컨텐츠 출력이 비어 있음을 알 수 있습니다.
exec ()는 작동하며,이를 통해 앱이 해당 작업을 중지하고 기다리도록 강요하지 않고 시간이 많이 걸리는 쉘 작업을 수행 할 수 있습니다.
그럼에도 불구하고 페이지의 콘텐츠 출력은 우리가 원하는 결과가 아닌 것 같습니다.
이유를 분석합시다.
우리의 코드는 동기식으로 실행되므로 exec ()을 호출 한 후 Node.js는 즉시 반환 내용을 실행합니다.
exec ()의 작동이 비동기식이기 때문에 콜백 함수가 아직 실행되지 않았기 때문에 현재는 콘텐츠가 여전히 "빈"입니다.
다음 섹션에서는이 문제를 해결하는 방법을 설명합니다.