Nodejs 노트 (2)
12287 단어 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);
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Node.js를 AWS서버에서 사용하는 실습간단한 예제와 함께 AWS에서 Node.js를사용하는 법을 배워보도록 하겠다. 해당 github에 있는 레포지토리로 사용을 할 것이다. 3000번 포트로 Listen되는 예제이고 간단히 GET, POST, DELET...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.