초보자 일 때, 이전 관점과 완전히 다른 장면을 발견했습니다. 눈에 자바 스크립트가 사용되는 것은 무엇입니까? 특수 효과? 아니면 클라이언트와의 상호 작용입니까? JavaScript가 브라우저에서 처음 실행되었다고 말할 수 있습니다. 그러나 이런 식으로 생각하면 브라우저는 JavaScript로 수행 할 수있는 작업을 정의하는 컨텍스트를 제공합니다. 여기서는 비슷한 기업으로 생각할 수 있습니다. 기업은 여기서 할 수있는 일을 정의하지만 JavaScript 언어 자체가 할 수있는 일에 대해서는별로 말하지 않습니다. 실제로, 완전한 언어로서, JavaScript는 다른 맥락에서 사용될 수 있으며 다른 능력을 반영합니다. 여기에 언급 된 nodejs는 실제로 그것을 무뚝뚝하게 넣는 것입니다. 이것은 컨텍스트와 실행중인 환경을 제공하여 JavaScript 코드를 백엔드 (브라우저 환경에서)에서 실행할 수 있습니다.
라우팅의 핵심은 라우팅입니다. 이름에서 알 수 있듯이 라우팅은 처리/시작의 비즈니스 로직 및 처리/업로드 모듈의 비즈니스 로직과 같은 다른 URL을 처리하는 데 필요한 다양한 처리 방법을 나타냅니다. 논리는 일관성이 없습니다. 실제로, 라우팅 프로세스는 라우팅 모듈에서 "종료"되며 라우팅 모듈은 요청에 대해 "조치를 취하는"실제 모듈이 아닙니다. 그렇지 않으면 응용 프로그램이 더 복잡해지면 잘 확장 될 수 없습니다.
여기에서 먼저 requesthandlers라는 모듈을 생성하고 각 요청 핸들러에 대한 자리 표시 자 기능을 추가합니다.
코드 사본은 다음과 같습니다.
함수 start () {
Console.log ( "요청 핸들러 '시작'이 호출되었습니다.");
기능 수면 (밀리 초) {
var starttime = new date (). gettime ();
while (new date (). gettime () <starttime+milliseconds);
}
수면 (10000);
"Hello Start"를 반환합니다.
}
함수 upload () {
Console.log ( "요청 처리기 '업로드'가 호출되었습니다.");
"안녕하세요 업로드"를 반환합니다.
}
Exports.start = 시작;
Exports.upload = 업로드;
이러한 방식으로 요청 핸들러와 라우팅 모듈을 연결하여 경로를 "따라야 할 방법"을 연결할 수 있습니다. 그 후, 우리는 일련의 요청 핸들러를 객체를 통해 전달하기로 결정했으며,이 객체를 라우터 () 함수, main file index.js : js : js :
코드 사본은 다음과 같습니다.
var server = require ( "./ server");
var router = require ( "./ router");
var requestHandlers = require ( "./ requestHandlers");
var 핸들 = {};
핸들 [ "/"] = requestHandlers.start;
[ "/start"] = requestHandlers.Start를 처리합니다.
[ "/upload"] = requestHandlers.Upload를 처리합니다.
server.start (router.route, handle);
위에서 볼 수 있듯이 다른 URL을 동일한 요청 핸들러에 쉽게 매핑 할 수 있습니다. requestHandlers.start에 해당하는 키 "/"가있는 속성을 객체에 추가하십시오. 이런 식으로, 우리는 단순히 시작하려는 두 요청을 모두 구성 / 시작하고 / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /를 시작할 수 있습니다. 객체의 정의를 살펴보면 서버에 추가 매개 변수로 전달합니다. Server.js를 참조하십시오.
코드 사본은 다음과 같습니다.
var http = 요구 사항 ( "http");
var url = require ( "url");
함수 시작 (경로, 핸들) {
onrequest (요청, 응답) {
var pathname = url.parse (request.url) .pathname;
console.log ( ""+pathname+"에 대한 요청");
경로 (핸들, PathName);
response.writehead (200, { "content-type": "text/plain"});
var content = Route (핸들, PathName);
응답 (컨텐츠);
응답 ();
}
http.createserver (onrequest) .listen (8888);
Console.log ( "서버가 시작되었습니다.");
}
Exports.start = 시작;
이러한 방식으로 핸들 매개 변수가 start () 함수에 추가되고 핸들 객체는 route () 콜백 함수로 첫 번째 매개 변수로 전달됩니다. 다음은 Route.js를 정의합니다.
코드 사본은 다음과 같습니다.
기능 경로 (핸들, PathName) {
Console.log ( ""+ pathname에 대한 요청을 라우팅하려면);
if (typeof handle [pathname] === 'function') {
리턴 핸들 [pathname] ();
}또 다른{
console.log ( ""+pathname에 대한 요청 핸들러 없음);
"404 찾을 수 없다"는 반환;
}
}
Exports.route = 경로;
위의 코드를 통해 먼저 주어진 경로에 해당하는 요청 핸들러가 존재하는지 확인하고 그렇다면 해당 함수를 직접 호출합니다. 우리는 통과 된 객체에서 요청 처리 기능을 연관 배열에서 요소를 가져 오는 것, 즉 [pathname] ()을 처리 할 수 있습니다. 그러한 표현은 사람들에게 "안녕하세요,이 길을 도와주세요."라고 말하는 느낌을줍니다. 프로그램 실행 효과는 다음과 같습니다.