>웹 프론트엔드 >JS 튜토리얼 >nodejs_node.js에서 라우팅 기능 구현

nodejs_node.js에서 라우팅 기능 구현

WBOY
WBOY원래의
2016-05-16 16:23:591095검색

처음 Node를 배우기 시작했을 때 이전의 관점과는 완전히 다른 상황을 발견했습니다. 여러분의 눈에는 JavaScript가 무엇을 위해 사용됩니까? 특수 효과? 아니면 단지 고객과의 상호작용인가요? 하지만 이렇게 생각하면 브라우저는 단지 JavaScript를 사용하여 수행할 수 있는 작업을 정의하는 컨텍스트(context)를 제공한다고 생각할 수 있습니다. 여기에서 무엇을 할 수 있는지 정의하지만 JavaScript 언어 자체가 무엇을 할 수 있는지에 대해서는 많이 언급하지 않습니다. 실제로 완전한 언어인 JavaScript는 다양한 상황에서 사용될 수 있으며 다양한 기능을 반영할 수 있습니다. 여기에 언급된 Nodejs는 실제로 JavaScript 코드가 백엔드(브라우저 환경 외부)에서 실행될 수 있도록 하는 실행 환경인 컨텍스트를 제공합니다.

라우팅 선택의 핵심은 라우팅입니다. 이름에서 알 수 있듯이 라우팅은 /start의 비즈니스 로직 처리와 /upload 모듈의 비즈니스 처리가 일치하지 않는 등 URL마다 다른 처리 방법이 있음을 의미합니다. . 현실적인 구현에서 라우팅 프로세스는 라우팅 모듈에서 "종료"되며 라우팅 모듈은 요청에 대해 실제로 "조치를 취하는" 모듈이 아닙니다. 그렇지 않으면 애플리케이션이 더 복잡해지면 사용할 수 없게 됩니다. .

여기에서는 먼저 requestHandlers라는 모듈을 생성하고 각 요청 핸들러에 자리 표시자 함수를 추가합니다.


코드 복사 코드는 다음과 같습니다.

함수 시작(){
console.log("요청 핸들러 'start'가 호출되었습니다.");                          
함수 sleep(밀리초){
        var startTime=new Date().getTime();                                    ​​​​​while(new Date().getTime() 수면(10000)
"안녕하세요 시작"을 반환합니다.
}
함수 업로드(){
console.log("요청 핸들러 '업로드'가 호출되었습니다."); "안녕하세요 업로드"를 반환합니다.
}

수출.시작=시작
수출.업로드=업로드;




이런 방식으로 요청 핸들러와 라우팅 모듈을 연결하여 라우팅이 "따라야 할 경로를 갖게" 됩니다. 그 후, 우리는 일련의 요청 핸들러가 객체를 통해 전달될 것이며 이 객체는 느슨한 결합 방법을 사용하여 router() 함수에 주입되어야 한다고 결정했습니다. 기본 파일 index.js:


코드 복사

코드는 다음과 같습니다. var 서버=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에 해당하는 개체에 추가하기만 하면 됩니다. 이러한 방식으로 /start 및 /에 대한 요청이 시작 핸들러에 의해 처리되도록 간단하게 구성할 수 있습니다. 객체 정의를 완료한 후 이를 추가 매개변수로 서버에 전달합니다. server.js를 참조하세요.

코드 복사

코드는 다음과 같습니다.

var http=require("http")
var url=require("url")

함수 시작(경로, 핸들){
onRequest(요청,응답) 함수{
      var pathname=url.parse(request.url).pathname;
console.log("" 경로명 "에 대한 요청이 수신되었습니다."); ~ 경로(핸들, 경로명)
~         response.writeHead(200,{"Content-Type":"text/plain"});                                  var content=route(handle,pathname);                                          response.write(content);                                          response.end();                                               }  
http.createServer(onRequest).listen(8888)
Console.log("서버가 시작되었습니다."); } 
수출.시작=시작;



이런 방식으로 start() 함수에 핸들 매개변수가 추가되고, Route() 콜백 함수에 첫 번째 매개변수로 핸들 객체가 전달됩니다.




코드 복사

코드는 다음과 같습니다.

함수 경로(핸들, 경로 이름){ console.log("pathname에 대한 요청을 라우팅하려고 합니다." If(핸들 유형[경로 이름]===='함수'){            반환 핸들[경로 이름]();                                      }else{   console.log("경로명에 대한 요청 핸들러를 찾을 수 없습니다.            "404 찾을 수 없음" 반환;                                 }  
}
수출.경로=경로;



위의 코드를 통해 먼저 주어진 경로에 해당하는 요청 핸들러가 존재하는지 확인하고, 존재한다면 해당 함수를 직접 호출합니다. 연관 배열에서 요소를 가져오는 것과 동일한 방식으로 전달된 개체에서 요청 처리 기능을 가져올 수 있습니다. 즉, 이러한 표현은 사람들에게 "안녕하세요, 와서 도와주세요. 이 경로를 처리하세요." 프로그램의 실행 효과는 다음과 같습니다.





성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.