nodejs에서 라우팅 기능 구현

高洛峰
풀어 주다: 2017-02-06 12:51:14
원래의
937명이 탐색했습니다.

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

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

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

function start(){   
    console.log("Request handler 'start' was called.");   
       
    function sleep(milliSeconds){   
        var startTime=new Date().getTime();   
        while(new Date().getTime()<startTime+milliSeconds);   
    }   
    sleep(10000);   
    return "Hello Start";   
}   
function upload(){   
    console.log("Request handler &#39;upload&#39; was called.");   
    return "Hello Upload";   
}   
  
exports.start=start;   
exports.upload=upload;
로그인 후 복사

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

var server=require("./server");   
var router=require("./router");   
var requestHandlers=require("./requestHandlers");   
  
var handle={};   
handle["/"]=requestHandlers.start;   
handle["/start"]=requestHandlers.start;   
handle["/upload"]=requestHandlers.upload;   
  
server.start(router.route,handle);
로그인 후 복사

는 위에 표시된 것과 같습니다. 동일한 요청 핸들러에 다른 URL을 매핑하는 것은 쉽습니다. requestHandlers.start에 해당하는 개체에 "/" 키가 있는 속성을 추가하기만 하면 됩니다. 이러한 방식으로 /start 및 /에 대한 요청이 시작 핸들러에 의해 처리되도록 간단하게 구성할 수 있습니다. 객체 정의를 완료한 후 이를 추가 매개변수로 서버에 전달합니다. server.js를 참조하세요.

var http=require("http");   
var url=require("url");   
  
function start(route,handle){   
    function onRequest(request,response){   
        var pathname=url.parse(request.url).pathname;   
        console.log("Request for "+pathname+" received.");   
           
        route(handle,pathname);   
           
        response.writeHead(200,{"Content-Type":"text/plain"});   
        var content=route(handle,pathname);   
        response.write(content);   
        response.end();   
    }   
    http.createServer(onRequest).listen(8888);   
    console.log("Server has started.");   
}    
exports.start=start;
로그인 후 복사

이런 방식으로 start() 함수에 핸들 매개변수가 추가되고 핸들 첫 번째 A 매개변수는 Route() 콜백 함수로 전달됩니다. Route.js는 아래와 같이 정의됩니다.

function route(handle,pathname){   
    console.log("About to route a request for "+ pathname);   
    if(typeof handle[pathname]===&#39;function‘){   
        return handle[pathname]();   
    }else{   
        console.log("No request handler found for "+pathname);   
        return "404 Not Found";   
    }   
}   
exports.route=route;
로그인 후 복사

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

nodejs에서 라우팅 기능 구현

nodejs의 라우팅 기능 구현과 관련된 더 많은 기사를 보려면 PHP에 주목하세요. 중국사이트!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!