Latest web development tutorials

Node.js를 경로

우리는 필요한 URL 요청 라우팅과 다른 GET 및 POST 매개 변수, 해당 코드를 수행 할 수있는 경로 데이터에 다음 이러한 필요를 제공하고자합니다.

따라서, 우리는 HTTP 요청을 보려면 URL을 추출 / POST 매개 변수 요청을 GET 할 필요가있다. 이 기능은 경로 또는 서버의 일부가되어야합니다 (또는 모듈 자체의 기능도로) 탐구 정말 가치가 있지만 여기가 시험 적으로 우리의 HTTP 서버 예정이다.

우리가 필요로하는 모든 데이터가 요청 객체에 포함되어 콜백 함수에 onRequest와 객체 () 첫 번째 인수가 전달됩니다. 그러나이 데이터를 해결하기 위해, 우리는 URL 및 쿼리 문자열 모듈 추가적인 Node.js를 모듈을해야합니다.

                   url.parse(string).query
                                           |
           url.parse(string).pathname      |
                       |                   |
                       |                   |
                     ------ -------------------
http://localhost:8888/start?foo=bar&hello=world
                                ---       -----
                                 |          |
                                 |          |
              querystring(string)["foo"]    |
                                            |
                         querystring(string)["hello"]

물론, 우리는 또한 POST 요청 매개 변수의 몸을 구문 분석 쿼리 문자열 모듈을 사용할 수 있습니다, 우리는 나중에 설명 할 것이다.

이제 우리는 URL 경로 브라우저 요청을 찾기 위해 로직을 추가 onRequest () 함수에 올 :

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

function start() {
  function onRequest(request, response) {
    var pathname = url.parse(request.url).pathname;
    console.log("Request for " + pathname + " received.");
    response.writeHead(200, {"Content-Type": "text/plain"});
    response.write("Hello World");
    response.end();
  }

  http.createServer(onRequest).listen(8888);
  console.log("Server has started.");
}

exports.start = start;

우리는 기준 처리기에 매핑 된 URL 경로에 요청 (아직 완료) 경로를 사용할 수 - 음, 우리는 이제 어플리케이션 URL 경로는 상이한 요청 구별 요청있다.

우리는의 요청이 / 시작 / 업로드가 처리하기 위해 다른 코드를 사용할 수 있음을 의미하는 애플리케이션을 구축 할 수 있습니다. 나중에 우리가 함께 이러한 요소를 통합하는 방법을 볼 수 있습니다.

이제 우리는 경로를 작성하고 파일 이름 router.js을 만들 수 있습니다, 다음을 추가합니다 :

function route(pathname) {
  console.log("About to route a request for " + pathname);
}

exports.route = route;

당신이 볼 수 있듯이,이 코드는 아무 짓도 안 했어요,하지만 지금은해야합니다. 과거에 더 많은 로직을 추가의 라우팅 및 서버를 통합하는 방법을 살펴 보자.

우리는 라우팅 서버가 있음을 인식하고 효율적으로 사용해야합니다. 물론, 우리는 서버에 대한 종속성에 바인딩이 방식으로 하드 코딩 할 수 있지만, 다른 프로그래밍 언어의 경험은 매우 고통스러운 일이 될 것입니다, 그래서 우리는 의존성 주입을 사용하여 상대적으로 느슨하게 경로를 추가합니다 우리에게 말했다 모듈.

과거의 인수로 라우팅 기능은 다음과 같이 파일의 코드는 server.js 있도록 먼저, 서버 시작 () 함수를 확장 할 수

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

function start(route) {
  function onRequest(request, response) {
    var pathname = url.parse(request.url).pathname;
    console.log("Request for " + pathname + " received.");

    route(pathname);

    response.writeHead(200, {"Content-Type": "text/plain"});
    response.write("Hello World");
    response.end();
  }

  http.createServer(onRequest).listen(8888);
  console.log("Server has started.");
}

exports.start = start;

동시에, 우리는 너무 라우팅 기능 서버에 주입 될 수 있고, 이에 따라 확장하는 index.js 것

var server = require("./server");
var router = require("./router");

server.start(router.route);

여기, 우리는 함수가 아직 아무 짓도하지 않았습니다 전달합니다.

지금 애플리케이션 (노드하는 index.js는 항상 명령 라인을 기억) 시작하고 URL을 요청하는 경우, 우리의 HTTP 서버에 이미 라우팅 모듈을 사용하는 것을 나타내는 출력 정보에 대응하는 애플리케이션을 볼 것이며, 요청할 경로는 경로에 전달됩니다 :

$ node index.js
Server has started.

출력은 더욱 성가신 /favicon.ico 요청의 관련 부분에 제거되었다.

다음과 같이 브라우저 액세스 http://127.0.0.1:8888/, 출력 결과는 다음과 같습니다