Rumah  >  Artikel  >  hujung hadapan web  >  Item pembelajaran Nodejs【Bermula】_node.js

Item pembelajaran Nodejs【Bermula】_node.js

WBOY
WBOYasal
2016-05-16 15:01:571720semak imbas

1. Pemasangan

Pertama, pergi ke http://nodejs.org untuk memuat turun dan memasang. Versi yang saya muat turun ialah 0.8.14. Pemasangan sangat mudah, cuma ambil langkah seterusnya. Kemudian konfigurasikan direktori pemasangan dalam laluan, dan msi akan memasang npm (Pengurus Pakej Node) bersama-sama.

Item pembelajaran Nodejs【Bermula】_node.js

Direktori pemasangan saya ialah C:Program Files (x86)nodejs. Pada masa ini, gunakan tetingkap arahan cmd node -v dan perintah npm -v untuk menyemak versi yang dipasang

1.1, helloworld

Buat fail baharu hello.js dalam direktori projek Node.js dan taip baris kod di dalamnya

console.log('hello, nodejs.') ;

Masukkan konsol baris arahan, masukkan direktori projek Node.js dan taip nod hello.js

Output konsol "hello, nodejs."

1.2, versi web helloworld

Buat http.js baharu dalam direktori projek Node.js, kodnya adalah seperti berikut

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

Mulakan perkhidmatan dalam baris arahan dan taip nod http.js

Kemudian buka bar alamat penyemak imbas dan masukkan http://localhost:8000/ Apabila anda melihat keluaran Hello World pada halaman, ia berjaya.

Versi node.js mesti disegerakkan dengan API

Nombor versi node.js ialah versi bernombor genap ialah versi stabil dan versi bernombor ganjil ialah versi tidak stabil

2 analisis kod HelloWorld

Baiklah, mari analisa HelloWorld kami baris demi baris mulai sekarang.

Modul pengenalan

var http = require("http");

Kaedah memerlukan digunakan untuk memperkenalkan modul, dan parameter ialah nama modul. Sebagai contoh, modul Sistem Fail boleh diperkenalkan seperti ini:

var fs = require("fs");

Kita boleh menggunakan kaedah require() sebagai kaedah global, tetapi sebenarnya ia lebih seperti kaedah tempatan yang dimiliki oleh modul tertentu. Dokumentasinya ada di sini: https://nodejs.org/api/globals.html .

Kaedah require mengembalikan tika modul tertentu Sebagai contoh, require("http") mengembalikan tika HTTP. Dokumentasi rujukan untuk contoh HTTP ada di sini: https://nodejs.org/api/http.html.

Kami melihat bahawa modul HTTP mempunyai kaedah createServer(), yang melibatkan baris kedua kod kami.

Buat Pelayan

Kaedah createServer() modul HTTP menerima kaedah sebagai parameter, dan prototaipnya ialah:

http.createServer([requestListener])

requestListener ialah kaedah yang dikaitkan dengan acara permintaan kelas http.Server. Dengan cara ini, apabila permintaan pelanggan tiba, requestListener akan dipanggil.

requestListener mempunyai dua parameter, dan prototaip fungsi adalah seperti berikut:

function (request, response) { }

Jenis permintaan parameter pertama ialah http.IncomingMessage, yang melaksanakan antara muka Readable Stream.
Jenis parameter kedua ialah http.ServerResponse, yang melaksanakan antara muka Writeable Stream.

API Strim ada di sini: https://nodejs.org/api/stream.html. Pada masa yang sama, permintaan dan respons juga merupakan Pemancar Acara, yang boleh memancarkan peristiwa tertentu.

API EventEmitter ada di sini: https://nodejs.org/api/events.html#events_class_events_eventemitter Kemudian kita akan bercakap tentang cara menggunakan EventEmitter untuk memancarkan dan memproses acara.

Mari semak kod yang kami buat pelayan:

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

http.createServer mengembalikan contoh http.Server Kaedah mendengar http.Server membenarkan pelayan mendengar pada port tertentu, iaitu 8000 dalam contoh.

Seperti yang anda lihat, kami menyediakan fungsi tanpa nama kepada kaedah createServer. Dalam kaedah ini, kami menulis semula mesej "Hello World!" kepada pelanggan melalui parameter respons.

Analisis permintaan pelanggan

Kami menganalisis kaedah http.createServer sebelum ini Parameternya ialah kaedah dengan dua parameter, satu mewakili permintaan yang dihantar oleh pelanggan dan satu lagi mewakili respons untuk ditulis semula kepada klien. Mari kita lihat pada parameter permintaan.

permintaan ialah contoh http.IncomingMessage Melalui kejadian ini, kita boleh mendapatkan parameter permintaan, seperti kaedah HTTP, versi HTTP, url, pengepala, dll. API khusus ada di sini: https://nodejs.org /api /http.html#http_http_incomingmessage.

Mari kita lihat dengan mengubah suai HelloWorld.js (simpan sebagai HelloWorld2.js). Kodnya adalah seperti berikut:

// 引入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,然后跑到命令行看看输出了什么信息,我这里是这样的:

Item pembelajaran Nodejs【Bermula】_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浏览器的开发者工具来查看网络数据,可以很明确的看到。如下图所示:

Item pembelajaran Nodejs【Bermula】_node.js

HTTP响应

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

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

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn