Nodejs 학습항목【시작하기】_node.js

WBOY
풀어 주다: 2016-05-16 15:01:57
원래의
1718명이 탐색했습니다.

1. 설치

먼저 http://nodejs.org로 이동하여 다운로드하고 설치하세요. 제가 다운로드한 버전은 0.8.14 입니다. 설치는 매우 간단합니다. 다음 단계만 진행하면 됩니다. 그런 다음 해당 경로에 설치 디렉터리를 구성하면 msi가 npm(Node Package Manager)을 함께 설치합니다.

Nodejs 학습항목【시작하기】_node.js

내 설치 디렉터리는 C:Program Files (x86)nodejs입니다. 이때 cmd 명령창node -vnpm -v 명령을 이용하여 설치된 버전을 확인

하세요.

1.1, 헬로월드

Node.js 프로젝트 디렉터리에 hello.js라는 새 파일을 만들고 그 안에 코드 한 줄을 입력하세요

console.log('hello, nodejs.') ;
로그인 후 복사

명령줄 콘솔에 들어가서 Node.js 프로젝트 디렉토리를 입력하고 node hello.js를 입력하세요

콘솔 출력 "hello, nodejs."

1.2, helloworld 웹 버전

Node.js 프로젝트 디렉토리에 새로운 http.js를 생성합니다. 코드는 다음과 같습니다

var http = require("http");
http.createServer(function(request, response) {
 response.writeHead(200, {"Content-Type": "text/html"});
 response.write("Hello World!");
 response.end();
}).listen(8000);
로그인 후 복사

명령줄에서 서비스를 시작하고 node http.js를 입력하세요

그런 다음 브라우저 주소 표시줄을 열고 http://localhost:8000/을 입력하세요. 페이지에 Hello World!가 출력되면 성공한 것입니다.

node.js 버전은 API와 동기화되어야 합니다

node.js의 버전 번호는 일반 버전이고, 홀수 버전은 불안정 버전입니다.

2 HelloWorld 코드 분석

자, 이제부터 HelloWorld를 한 줄씩 분석해 보겠습니다.

소개 모듈

var http = require("http");
로그인 후 복사

require 메소드는 모듈을 소개하는 데 사용되며 매개변수는 모듈의 이름입니다. 예를 들어 파일 시스템 모듈은 다음과 같이 도입할 수 있습니다.

var fs = require("fs");
로그인 후 복사

require() 메소드를 전역 메소드로 사용할 수 있지만 실제로는 특정 모듈에 속하는 로컬 메소드에 더 가깝습니다. 해당 문서는 https://nodejs.org/api/globals.html에 있습니다. .

require 메소드는 특정 모듈의 인스턴스를 반환합니다. 예를 들어 require("http")는 HTTP 인스턴스를 반환합니다. HTTP 예제에 대한 참조 문서는 https://nodejs.org/api/http.html에 있습니다.

HTTP 모듈에는 두 번째 코드 줄과 관련된 createServer() 메서드가 있는 것을 볼 수 있습니다.

서버 생성

HTTP 모듈의 createServer() 메소드는 메소드를 매개변수로 받아들이고 프로토타입은 다음과 같습니다.

http.createServer([requestListener])
로그인 후 복사

requestListener는 http.Server 클래스의 요청 이벤트와 연관된 메소드입니다. 이런 방식으로 클라이언트 요청이 도착하면 requestListener가 호출됩니다.

requestListener에는 두 개의 매개변수가 있으며 함수 프로토타입은 다음과 같습니다.

function (request, response) { }
로그인 후 복사

첫 번째 매개변수 요청 유형은 http.IncomingMessage 인터페이스를 구현하는 Readable Stream입니다.
두 번째 매개변수의 유형은 http.ServerResponse 인터페이스를 구현하는 Writeable Stream입니다.

Stream의 API는 https://nodejs.org/api/stream.html에 있습니다. 동시에 요청과 응답도 특정 이벤트를 내보낼 수 있는 EventEmitters입니다.

EventEmitter의 API는 https://nodejs.org/api/events.html#events_class_events_eventemitter에 있습니다. 나중에 EventEmitter를 사용하여 이벤트를 내보내고 처리하는 방법에 대해 설명하겠습니다.

서버를 생성한 코드를 검토해 보겠습니다.

http.createServer(
 function(request, response) { 
  response.writeHead(200, {"Content-Type": "text/plain"}); 
  response.write("Hello World!"); 
  response.end(); 
 }
).listen(8000); 
로그인 후 복사

http.createServer는 http.Server 인스턴스를 반환합니다. http.Server의 수신 메소드를 사용하면 서버가 특정 포트(예: 8000)에서 수신 대기할 수 있습니다.

보시다시피 createServer 메소드에 익명 함수를 제공합니다. 이 방법에서는 응답 매개변수를 통해 "Hello World!" 메시지를 클라이언트에 다시 작성합니다.

고객 요청 분석

앞서 http.createServer 메소드를 분석했습니다. 해당 매개변수는 두 개의 매개변수를 갖는 메소드입니다. 하나는 클라이언트가 보낸 요청을 나타내고 다른 하나는 클라이언트에 다시 쓸 응답을 나타냅니다. 요청 매개변수를 살펴보겠습니다.

요청은 http.IncomingMessage의 인스턴스입니다. 이 인스턴스를 통해 HTTP 메소드, HTTP 버전, URL, 헤더 등과 같은 요청 매개변수를 얻을 수 있습니다. 특정 API는 https://nodejs.org에 있습니다. /api /http.html#http_http_incoming메시지.

HelloWorld.js를 수정하여 살펴보겠습니다(HelloWorld2.js로 저장). 코드는 다음과 같습니다.

// 引入http模块
var http = require("http"); 

// 创建server,指定处理客户端请求的函数
http.createServer(
 function(request, response) { 
  console.log("method - " + request.method);
  console.log("version - " + request.httpVersion);
  console.log("url - " + request.url);
  response.writeHead(200, {"Content-Type": "text/plain"}); 
  response.write("Hello World!"); 
  response.end(); 
 }
).listen(8000); 

console.log("Hello World start listen on port 8000");
로그인 후 복사

如你所见,我使用console这个对象来输出了一些调试信息,打印了HTTP方法、版本、url等信息。可以执行node HelloWorld2.js,浏览器访问http://localhost:8000,然后跑到命令行看看输出了什么信息,我这里是这样的:

Nodejs 학습항목【시작하기】_node.js

我们简简单单的HelloWorld已经可以发送一些响应数据给客户端,你在浏览器里能看到“Hello World!”字样。这个响应是通过http.ServerResponse的实例response发送给客户端的。

http.ServerResponse也是一个Stream,还是一个EventEmitter。我们通过它给客户度返回HTTP状态码、数据、HTTP头部等信息。

HTTP模块
在Node.js的HTTP模块,状态行就是通过http.ServerResponse的writeHead方法写给客户端的。writeHead方法原型如下:

response.writeHead(statusCode[, statusMessage][, headers])
로그인 후 복사

这个方法的第一个参数,就是statusCode,也就是200、403之类的数字,剩下的参数是可选的。最后一个参数是headers,你可以在这里使用JSON对象表示法来写一些HTTP头部,比如:{“Content-Type”:”text/plain”,”Content-Length”:11}。第一个可选参数statusMessage用来指定一个状态描述消息,可以不填写。

HTTP头部

头部就是一些key-value对,比如我们在HelloWorld里看到的”Content-Type”,就是用来说明数据类型的头部标签,对应的可能是文本文件、图片、视频、二进制等。类似的还有”Content-Length”,用来指定数据长度。还有很多很多,比如”Date”、”Connection”等。具体还是参考前面的链接吧。

头部还可以使用http.ServerResponse的response.setHeader(name, value)方法来单独设置,一次可以设置一个HTTP头部。

数据

头部之后就是数据了,有些状态码,比如200,后续都会有一些数据。而有些,比如301、404、403、500之类的,多数没有数据。

数据通过http.ServerResponse的write方法来写回给客户端,比如这样:

response.setHeader("Content-Type", "text/html");
로그인 후 복사

这里要提一点,HTTP常见的数据传输编码方式有两种:

设置Content-Length,传输固定长度的数据设置Transfer-Encoding头部为chunked,分块传输数据

像我们现在的HelloWorld示例,没有设置Content-Length头部,Node.js的HTTP模块就默认为chunked编码。

我们使用Chrome浏览器的开发者工具来查看网络数据,可以很明确的看到。如下图所示:

Nodejs 학습항목【시작하기】_node.js

HTTP响应

我标注出来的三处,都是HelloWorld示例传递给浏览器的HTTP头部信息。

我们通过http.ServerResponse的write方法向客户端写数据。你可以一次写入所有数据,也可以把数据分开来多次写入。当要传输的数据量较大时,分多次写入就是比较合理的做法,比如你向客户端发送大文件,就比较适合分多次写入,也可以利用Node.js的异步特性,获得不错的性能。

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