欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Nodejs學習item【入門手上】

 更新時間:2016年05月05日 17:52:03   作者:小平果118  
這篇文章主要介紹了Nodejs學習item【入門手上】,需要的朋友可以參考下

一、 安裝

首先,去http://nodejs.org 下載安裝。我下的版本是0.8.14。安裝很簡單,下一步下一步就哦了。然后在path中配置一下安裝目錄即可,msi會把npm(Node Package Manager)一并裝上。

這里寫圖片描述

我的安裝目錄是C:\Program Files (x86)\nodejs。這時使用cmd命令窗口 node -v ,npm -v命令查看下安裝的版本

1.1、helloworld

在Node.js工程目錄中新建一個文件hello.js,里面敲一行代碼

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

進入命令行控制臺,進入到Node.js工程目錄敲node hello.js

控制臺輸出了“hello, nodejs.”

1.2、web版的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);

在命令行中啟動服務(wù),敲 node http.js

然后打開瀏覽器地址欄輸入http://localhost:8000/,看見頁面上輸出Hello World! 就成功了。

node.js的版本一定和API同步

node.js的版本號有規(guī)律,偶數(shù)版本為穩(wěn)定版本,奇數(shù)版本非穩(wěn)定版本

2 HelloWorld代碼分析

好啦,從現(xiàn)在開始逐行分析我們的HelloWorld。

引入模塊

var http = require("http");

require方法用來引入一個模塊,參數(shù)是模塊的名字。比如File System模塊,可以這么引入:

var fs = require("fs");

我們可以把require()方法當做全局方法使用,但實際上它更像屬于某個模塊的本地方法,它的文檔參考這里:https://nodejs.org/api/globals.html。

require方法返回某個模塊的實例,比如require(“http”)就返回一個HTTP實例。HTTP實例的參考文檔在這里:https://nodejs.org/api/http.html。

我們看到,HTTP模塊有一個方法createServer(),就牽涉到我們的第二行代碼了。

創(chuàng)建服務(wù)器

HTTP模塊的createServer()方法,接受一個方法作為參數(shù),原型為:

http.createServer([requestListener])

requestListener是一個方法,會與http.Server類的request事件關(guān)聯(lián)起來。這樣當客戶端請求到達時,requestListener就會被調(diào)用。

requestListener有兩個參數(shù),函數(shù)原型如下:

function (request, response) { }

第一個參數(shù)request的類型是http.IncomingMessage,實現(xiàn)了Readable Stream接口。
第二個參數(shù)的類型是http.ServerResponse,實現(xiàn)了Writeable Stream接口。

Stream的API在這里:https://nodejs.org/api/stream.html。同時,request和response還是EventEmitter,可以發(fā)射特定的事件。

EventEmitter的API在這里:https://nodejs.org/api/events.html#events_class_events_eventemitter,后面我們會講如何使用EventEmitter來發(fā)射事件、處理事件。

再回顧一下我們創(chuàng)建server的代碼:

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的listen方法可以讓服務(wù)器監(jiān)聽在某個端口上,示例中是8000。

如你所見,我們提供了一個匿名函數(shù)給createServer方法。在這個方法中,我們通過response參數(shù)向客戶端回寫了“Hello World!”消息。

分析客戶端請求

前面我們分析了http.createServer方法,它的參數(shù)是一個帶兩個參數(shù)的方法,一個代表了客戶端發(fā)過來的請求,一個代表了要回寫給客戶端的響應(yīng)。我們來看看request參數(shù)。

request是http.IncomingMessage的實例,通過這個實例,我們可以拿到請求參數(shù),比如HTTP方法、HTTP版本、url、頭部等,具體的API在這里:https://nodejs.org/api/http.html#http_http_incomingmessage。

我們通過修改HelloWorld.js來看看(另存為HelloWorld2.js)。代碼如下:

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

// 創(chuàng)建server,指定處理客戶端請求的函數(shù)
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這個對象來輸出了一些調(diào)試信息,打印了HTTP方法、版本、url等信息??梢詧?zhí)行node HelloWorld2.js,瀏覽器訪問http://localhost:8000,然后跑到命令行看看輸出了什么信息,我這里是這樣的:

這里寫圖片描述

我們簡簡單單的HelloWorld已經(jīng)可以發(fā)送一些響應(yīng)數(shù)據(jù)給客戶端,你在瀏覽器里能看到“Hello World!”字樣。這個響應(yīng)是通過http.ServerResponse的實例response發(fā)送給客戶端的。

http.ServerResponse也是一個Stream,還是一個EventEmitter。我們通過它給客戶度返回HTTP狀態(tài)碼、數(shù)據(jù)、HTTP頭部等信息。

HTTP模塊
在Node.js的HTTP模塊,狀態(tài)行就是通過http.ServerResponse的writeHead方法寫給客戶端的。writeHead方法原型如下:

response.writeHead(statusCode[, statusMessage][, headers])

這個方法的第一個參數(shù),就是statusCode,也就是200、403之類的數(shù)字,剩下的參數(shù)是可選的。最后一個參數(shù)是headers,你可以在這里使用JSON對象表示法來寫一些HTTP頭部,比如:{“Content-Type”:”text/plain”,”Content-Length”:11}。第一個可選參數(shù)statusMessage用來指定一個狀態(tài)描述消息,可以不填寫。

HTTP頭部

頭部就是一些key-value對,比如我們在HelloWorld里看到的”Content-Type”,就是用來說明數(shù)據(jù)類型的頭部標簽,對應(yīng)的可能是文本文件、圖片、視頻、二進制等。類似的還有”Content-Length”,用來指定數(shù)據(jù)長度。還有很多很多,比如”Date”、”Connection”等。具體還是參考前面的鏈接吧。

頭部還可以使用http.ServerResponse的response.setHeader(name, value)方法來單獨設(shè)置,一次可以設(shè)置一個HTTP頭部。

數(shù)據(jù)

頭部之后就是數(shù)據(jù)了,有些狀態(tài)碼,比如200,后續(xù)都會有一些數(shù)據(jù)。而有些,比如301、404、403、500之類的,多數(shù)沒有數(shù)據(jù)。

數(shù)據(jù)通過http.ServerResponse的write方法來寫回給客戶端,比如這樣:

response.setHeader("Content-Type", "text/html");

這里要提一點,HTTP常見的數(shù)據(jù)傳輸編碼方式有兩種:

設(shè)置Content-Length,傳輸固定長度的數(shù)據(jù)設(shè)置Transfer-Encoding頭部為chunked,分塊傳輸數(shù)據(jù)

像我們現(xiàn)在的HelloWorld示例,沒有設(shè)置Content-Length頭部,Node.js的HTTP模塊就默認為chunked編碼。

我們使用Chrome瀏覽器的開發(fā)者工具來查看網(wǎng)絡(luò)數(shù)據(jù),可以很明確的看到。如下圖所示:

這里寫圖片描述

HTTP響應(yīng)

我標注出來的三處,都是HelloWorld示例傳遞給瀏覽器的HTTP頭部信息。

我們通過http.ServerResponse的write方法向客戶端寫數(shù)據(jù)。你可以一次寫入所有數(shù)據(jù),也可以把數(shù)據(jù)分開來多次寫入。當要傳輸?shù)臄?shù)據(jù)量較大時,分多次寫入就是比較合理的做法,比如你向客戶端發(fā)送大文件,就比較適合分多次寫入,也可以利用Node.js的異步特性,獲得不錯的性能。

相關(guān)文章

  • Node.js實現(xiàn)mysql連接池使用事務(wù)自動回收連接的方法示例

    Node.js實現(xiàn)mysql連接池使用事務(wù)自動回收連接的方法示例

    這篇文章主要介紹了Node.js實現(xiàn)mysql連接池使用事務(wù)自動回收連接的方法,結(jié)合實例形式分析了node.js操作mysql連接池實現(xiàn)基于事務(wù)的連接回收操作相關(guān)技巧,需要的朋友可以參考下
    2018-02-02
  • 基于Node.js + WebSocket打造即時聊天程序嗨聊

    基于Node.js + WebSocket打造即時聊天程序嗨聊

    這篇文章主要介紹了基于Node.js + WebSocket打造即時聊天程序,有興趣的可以了解一下。
    2016-11-11
  • Nodejs使用Mongodb存儲與提供后端CRD服務(wù)詳解

    Nodejs使用Mongodb存儲與提供后端CRD服務(wù)詳解

    這篇文章主要給大家介紹了關(guān)于Nodejs使用Mongodb存儲與提供后端CRD服務(wù)的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-09-09
  • nodejs的路徑問題的解決

    nodejs的路徑問題的解決

    這篇文章主要介紹了nodejs的路徑問題的解決,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-06-06
  • jQuery+koa2實現(xiàn)簡單的Ajax請求的示例

    jQuery+koa2實現(xiàn)簡單的Ajax請求的示例

    這篇文章主要介紹了jQuery+koa2實現(xiàn)簡單的Ajax請求的示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • nodejs對項目下所有空文件夾創(chuàng)建gitkeep的方法

    nodejs對項目下所有空文件夾創(chuàng)建gitkeep的方法

    這篇文章主要介紹了nodejs對項目下所有空文件夾創(chuàng)建gitkeep的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-08-08
  • NodeJS 文件夾拷貝以及刪除功能

    NodeJS 文件夾拷貝以及刪除功能

    這篇文章主要介紹了NodeJS 文件夾拷貝以及刪除功能,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-09-09
  • node爬取新型冠狀病毒的疫情實時動態(tài)

    node爬取新型冠狀病毒的疫情實時動態(tài)

    這篇文章主要介紹了node爬取新型冠狀病毒的疫情實時動態(tài),非常不錯,本文通過實例代碼給大家講解的非常詳細,需要的朋友可以參考下
    2020-02-02
  • node.js安裝超詳細步驟教程(推薦!)

    node.js安裝超詳細步驟教程(推薦!)

    其實Node.js就是運行在服務(wù)端的JavaScript,Node.js是一個基于Chrome?JavaScript運行時建立的一個平臺,下面這篇文章主要給大家介紹了關(guān)于node.js安裝超詳細步驟教程的相關(guān)資料,需要的朋友可以參考下
    2023-06-06
  • 關(guān)于Mac下安裝nodejs、npm和cnpm的教程

    關(guān)于Mac下安裝nodejs、npm和cnpm的教程

    本文通過圖文并茂的形式給大家介紹了Mac下安裝nodejs、npm和cnpm的教程,非常不錯,具有參考借鑒價值,需要的朋友參考下吧
    2018-04-04

最新評論