Nodejs 노트 (2)

12287 단어 nodejs
Nodejs 이벤트
  Node. js 의 모든 비동기 I / O 작업 이 완료 되면 이벤트 대기 열 에 이 벤트 를 보 냅 니 다.
  Node. js 의 많은 대상 이 이 벤트 를 나 눠 줍 니 다. 하나의 net. server 대상 은 새로운 연결 이 있 을 때마다 이 벤트 를 나 눠 줍 니 다. fs. readStream 대상 은 파일 이 열 릴 때 이 벤트 를 보 냅 니 다.이 모든 사건 의 대상 은 events. EventEmitter 의 인 스 턴 스 입 니 다.require (이벤트) 를 통 해 이 모듈 에 접근 할 수 있 습 니 다.
 EventEmitter 의 용법:
//event.js 

var EventEmitter = require('events').EventEmitter; 

var event = new EventEmitter(); 

event.on('some_event', function() { 

    console.log('some_event occured.'); 

}); 

setTimeout(function() { 

    event.emit('some_event'); 

}, 1000); 

  실행 코드, 1 초 후 콘 솔 에서 'some' 을 출력 합 니 다.event occured'。원 리 는 이벤트 대상 이 이벤트 some 를 등 록 했 습 니 다.이벤트 의 모니터, 그리고 setTimeout 을 통 해 1000 밀리초 후에 이벤트 대상 에 게 이벤트 some 를 보 냅 니 다.이벤트, 이 때 some 호출이벤트 모니터.
EventsEmitter
   이벤트 모듈 은 하나의 대상 만 제공 합 니 다: events. EventEmitter.EventEmitter 의 핵심 은 이벤트 트리거 와 이벤트 모니터 기능 의 패키지 입 니 다.
   EventEmitter 의 모든 사건 은 하나의 사건 이름과 N 개의 매개 변수 로 구성 되 어 있 으 며, 모든 사건 에 대해 EventEmitter 는 여러 개의 사건 감청 기 를 지원 합 니 다.이벤트 가 실 행 될 때 이 이벤트 에 등 록 된 이벤트 모니터 가 순서대로 호출 되 고 이벤트 매개 변 수 는 리 셋 함수 매개 변수 로 전 달 됩 니 다.반전 함 수 는 순서대로 호출 된다.
var events = require('events'); 

var emitter = new events.EventEmitter(); 

emitter.on('someEvent', function(arg1, arg2) { 

    console.log('listener1', arg1, arg2); 

}); 

emitter.on('someEvent', function(arg1, arg2) { 

    console.log('listener2', arg1, arg2); 

}); 

emitter.emit('someEvent', 'void', 2008); 

결국
listener1 void 2008

listener2 void 2008

  EventEmitter. on (event, listener), emitter. addListener (event, listener) 는 지정 한 이벤트 에 모니터 를 등록 하고 문자열 이벤트 와 반전 함수 listener 를 받 습 니 다.
server.on('connection', function (stream) {

  console.log('someone connected!');

});

  EventEmitter. emit (event, [arg 1], [arg 2], [...]) 는 이벤트 이 벤트 를 촉발 하여 이벤트 모니터 에 선택 할 수 있 는 매개 변 수 를 전달 합 니 다.
  EventEmitter. once (event, listener) 는 지 정 된 이벤트 에 1 회 감청 기 를 등록 합 니 다. 즉, 감청 기 는 최대 한 번 만 촉발 되 고 촉발 후 즉시 이 감청 기 를 해제 합 니 다.
server.once('connection', function (stream) {

  console.log('We have our first user!');

});

  EventEmitter. removeListener (event, listener) 는 지정 한 이벤트 의 모니터 를 제거 합 니 다. listener 는 이 이벤트 에 등 록 된 모니터 여야 합 니 다.
var callback = function(stream) {

  console.log('someone connected!');

};

server.on('connection', callback);

// ...

server.removeListener('connection', callback);

 
Nodejs 경로
  때때로 루트 에 요청 한 URL 과 기타 필요 한 GET 및 POST 인 자 를 제공 해 야 하 며, 그 다음 루트 는 이 데이터 에 따라 해당 하 는 코드 를 실행 해 야 한다.
  따라서 HTTP 요청 을 보고 요청 한 URL 과 GET / POST 인 자 를 추출 해 야 합 니 다.이 기능 은 경로 에 속 해 야 하 는 지 서버 (심지어 모듈 자체 의 기능) 에 속 해 야 하 는 지 는 확실히 검토 할 필요 가 있 지만, 여 기 는 우리 의 HTTP 서버 기능 으로 잠 정적 으로 정 합 니 다.
  필요 한 모든 데 이 터 는 request 대상 에 포함 되 며, 이 대상 은 onRequest () 리 셋 함수 의 첫 번 째 매개 변수 로 전 달 됩 니 다.그러나 이 데 이 터 를 분석 하기 위해 서 는 url 과 query string 모듈 이 추가 로 필요 합 니 다.questring 으로 POST 데 이 터 를 분석 할 수도 있 습 니 다.
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 경 로 를 기준 으로 처리 프로그램 에 요청 을 표시 할 수 있 게 합 니 다.
  구축 할 응용 프로그램 에서 이것 은 / start 와 / upload 에서 온 요청 을 서로 다른 코드 로 처리 할 수 있 음 을 의미 합 니 다.
  router. js 라 는 파일 을 만 들 고 다음 내용 을 추가 합 니 다.
function route(pathname) {

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

}



exports.route = route;

  서버 는 경로 의 존 재 를 알 고 효과적으로 이용 해 야 한다.물론 하 드 인 코딩 을 통 해 이 의존 항목 을 서버 에 연결 할 수 있 지만 이것 은 고통스러운 일이 될 것 이 며, 주입 에 의존 하 는 방식 으로 루트 모듈 을 비교적 느슨하게 추가 할 수 있다.
  우선, 루트 함 수 를 매개 변수 로 전달 할 수 있 도록 서버 의 start () 함 수 를 확장 할 수 있 습 니 다.
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);

  현재 응용 프로그램 (node index. js) 을 시작 한 다음 URL 을 요청 하면 출력 에 해당 하 는 정 보 를 볼 수 있 습 니 다. 이것 은 HTTP 서버 가 경로 모듈 을 사용 하고 있 음 을 나타 내 며 요청 한 경 로 를 경로 에 전달 합 니 다.
bash$ node index.js

Request for /foo received.

About to route a request for /foo

Nodejs GET / POST 요청
  많은 장면 에서 서버 는 폼 제출, Ajax 요청 등 브 라 우 저 와 접촉 해 야 한다.서버 에 제출 할 양식 은 일반적으로 GET / POST 요청 을 사용 합 니 다.
  GET 요청 내용 가 져 오기:
  GET 요청 이 경로 에 직접 삽입 되 었 기 때문에 URL 은 완전한 요청 경로 입 니 다. 포함 되 어 있 습 니까?뒷부분 은 GET 가 요청 한 인자 로 뒷부분 을 수 동 으로 해석 할 수 있 습 니 다.node. js 에서 url 모듈 의 parse 함수 가 이 기능 을 제공 합 니 다.
var http = require('http');

var url = require('url');

var util = require('util');



http.createServer(function(req, res){

    res.writeHead(200, {'Content-Type': 'text/plain'});

    res.end(util.inspect(url.parse(req.url, true)));

}).listen(3000);

  브 라 우 저 에 접근 http://localhost:3000/user?name=Mary&email=Mary@163.com 한 후 되 돌아 오 는 결 과 를 봅 니 다.
{

  protocol:null,

  slashes:null,

  auth:null,

  host:null,

  port:null,

  hostname:null,

  hash:null,

  search:"?name=Mary&[email protected]",

  query:{name:"Mary",email:"[email protected]"},

  pathname:"/user",

  path:"/user?name=Mary&[email protected]",

  search:"/user?name=Mary&[email protected]"

}

  POST 내용 가 져 오기
  POST 가 요청 한 내용 은 모두 요청 체 에 있 습 니 다. http. server Request 는 요청 체 전송 을 기다 리 는 데 시간 이 걸 릴 수 있 기 때 문 입 니 다.
예 를 들 어 파일 을 업로드 할 때 요청 체 의 내용 을 무시 할 때 가 많 습 니 다. 악의 적 인 POST 요청 은 서버 의 자원 을 크게 소모 할 수 있 습 니 다. 모든 node. js 는 기본적으로 요청 체 를 분석 하지 않 고 필요 할 때 수 동 으로 해 야 합 니 다.
var http = require('http');

var querystring = require('querystring');

var util = require('util');



http.createServer(function(req, res){

    var post = '';     //     post  ,          



    req.on('data', function(chunk){    //  req data      ,           ,    post   

        post += chunk;

    });



    req.on('end', function(){    // end     ,  querystring.parse post      POST    ,        。

        post = querystring.parse(post);

        res.end(util.inspect(post));

    });

}).listen(3000);

좋은 웹페이지 즐겨찾기