요청 라우팅을 통해 응답 객체 (서버의 콜백 함수 onrequest ()에서 요청 핸들러로 전달하려고합니다. 그런 다음 핸들러는 객체의 함수를 사용하여 요청에 응답 할 수 있습니다.
먼저 Server.js를 변경하겠습니다.
코드 사본은 다음과 같습니다.
var http = 요구 사항 ( "http");
var url = require ( "url");
함수 시작 (경로, 핸들) {
onrequest (요청, 응답) {
var pathname = url.parse (request.url) .pathname;
console.log ( "" + pathname + "에 대한 요청");
경로 (핸들, PathName, 응답);
}
http.createserver (onrequest) .listen (8888);
Console.log ( "서버가 시작되었습니다.");
}
Exports.start = 시작;
응답 객체를 Route () 함수로 세 번째 매개 변수로 전달하고 OnRequest () 핸들러의 모든 응답 호출을 제거합니다.
다음으로 router.js를 수정하십시오.
코드 사본은 다음과 같습니다.
기능 경로 (핸들, PathName, 응답) {
Console.log ( "" + pathname에 대한 요청을 라우팅하려면);
if (typeof handle [pathname] === 'function') {
핸들 [pathname] (응답);
} 또 다른 {
console.log ( "" + pathname에 대한 요청 핸들러 없음);
response.writehead (404, { "content-type": "text/plain"});
response.write ( "404 찾을 수 없음");
응답 ();
}
}
Exports.route = 경로;
동일한 패턴 : 요청 핸들러에서 반환 값의 이전 획득과 비교하여 이번에는 응답 객체가 직접 전달됩니다. 처리 할 요청 처리기가 없으면 "404"오류를 직접 반환합니다.
다음으로 requestHandler.js를 수정하십시오.
코드 사본은 다음과 같습니다.
var exec = require ( "child_process"). exec;
함수 시작 (응답) {
Console.log ( "요청 핸들러 '시작'이 호출되었습니다.");
exec ( "ls -lah", 함수 (오류, stdout, stderr) {
response.writehead (200, { "content-type": "text/plain"});
응답 (stdout);
응답 ();
});
}
함수 업로드 (응답) {
Console.log ( "요청 처리기 '업로드'가 호출되었습니다.");
response.writehead (200, { "content-type": "text/plain"});
response.write ( "Hello Upload");
응답 ();
}
Exports.start = 시작;
Exports.upload = 업로드;
핸들러 기능은 요청에 직접 응답하려면 응답 매개 변수를 수신해야합니다. Start Handler는 Exec ()의 익명 콜백 함수에서 요청 응답 작업을 수행하는 반면 업로드 핸들러는 여전히 "Hello World"에 답장하지만 이번에는 응답 객체를 사용하고 있습니다.
/start 핸들러의 시간이 소요되는 작업이 /업로드 요청에 대한 즉각적인 응답을 차단하지 않음을 증명하려면 requestHandlers.js를 다음 형식으로 수정할 수 있습니다.
코드 사본은 다음과 같습니다.
var exec = require ( "child_process"). exec;
함수 시작 (응답) {
Console.log ( "요청 핸들러 '시작'이 호출되었습니다.");
exec ( "찾기 /",
{타임 아웃 : 10000, Maxbuffer : 20000*1024},
함수 (오류, stdout, stderr) {
response.writehead (200, { "content-type": "text/plain"});
응답 (stdout);
응답 ();
}
);
}
함수 업로드 (응답) {
Console.log ( "요청 처리기 '업로드'가 호출되었습니다.");
response.writehead (200, { "content-type": "text/plain"});
response.write ( "Hello Upload");
응답 ();
}
Exports.start = 시작;
Exports.upload = 업로드;
이러한 방식으로 http : // localhost : 8888/start를 요청할 때로드하는 데 10 초가 걸리며 http : // localhost : 8888/업로드를 요청하면/시작 응답이 여전히 처리 중이더라도 즉시 응답합니다.