在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ HTML/ Node.js快速入門
Node.js快速入門
Node.js事件發(fā)射器
Node.js包(JXcore)
Node.js事件循環(huán)
Node.js文件系統(tǒng)
Node.js npm
Node.js安裝和入門
Node.js工具模塊
Node.js回調(diào)概念
Node.js流
Node.js入門實(shí)例程序
Node.js教程
Node.js規(guī)范化應(yīng)用
Node.js REPL終端
Node.js緩沖器
Node.js RESTful API
Node.js全局對象
Linux安裝Node.js(源碼編譯安裝)
Node.js Web模塊
Node.js Express框架

Node.js快速入門

Node.js是什么?

Node.js是建立在谷歌Chrome的JavaScript引擎(V8引擎)的Web應(yīng)用程序框架。 它的最新版本是:v0.12.7(在編寫本教程時(shí)的版本)。Node.js在官方網(wǎng)站的定義文件內(nèi)容如下:

Node.js® is a platform built on Chrome's JavaScript runtime for easily building fast, scalable network applications. Node.js uses an event-driven, non-blocking I/O model that makes it lightweight and efficient, perfect for data-intensive real-time applications that run across distributed devices.

Node.js自帶運(yùn)行時(shí)環(huán)境可在Javascript腳本的基礎(chǔ)上可以解釋和執(zhí)行(這類似于JVM的Java字節(jié)碼)。這個(gè)運(yùn)行時(shí)允許在瀏覽器以外的任何機(jī)器上執(zhí)行JavaScript代碼。由于這種運(yùn)行時(shí)在Node.js上,所以JavaScript現(xiàn)在可以在服務(wù)器上并執(zhí)行。

Node.js還提供了各種豐富的JavaScript模塊庫,它極大簡化了使用Node.js來擴(kuò)展Web應(yīng)用程序的研究與開發(fā)。

Node.js = 運(yùn)行環(huán)境+ JavaScript庫

Node.js特性

  • Node.js庫的異步和事件驅(qū)動的API全部都是異步就是非阻塞。它主要是指基于Node.js的服務(wù)器不會等待API返回的數(shù)據(jù)。服務(wù)器移動到下一個(gè)API調(diào)用,Node.js發(fā)生的事件通知機(jī)制后有助于服務(wù)器獲得從之前的API調(diào)用的響應(yīng)。

  • 非??斓膬?nèi)置谷歌Chrome的V8 JavaScript引擎,Node.js庫代碼執(zhí)行是非常快的。

  • 單線程但高度可擴(kuò)展 - Node.js使用具有循環(huán)事件單線程模型。事件機(jī)制有助于服務(wù)器在一個(gè)非阻塞的方式響應(yīng)并使得服務(wù)器高度可擴(kuò)展,而不是創(chuàng)建線程限制來處理請求的傳統(tǒng)服務(wù)器。Node.js使用單線程的程序,但可以提供比傳統(tǒng)的服務(wù)器(比如Apache HTTP服務(wù)器)的請求服務(wù)數(shù)量要大得多。

  • 沒有緩沖 - Node.js的應(yīng)用從來不使用緩沖任何數(shù)據(jù)。這些應(yīng)用只是輸出數(shù)據(jù)在塊中。

  • 許可證協(xié)議 - Node.js 在 MIT 協(xié)議 下發(fā)布

都有誰在使用Node.js?

以下是包含正在使用node.js的項(xiàng)目,應(yīng)用和公司,一個(gè)詳盡的清單請點(diǎn)擊 github維基鏈接查看,這些清單里包括:eBay, General Electric, GoDaddy, Microsoft, PayPal, Uber, Wikipins, Yahoo!, Yammer 并越來越多加入繼續(xù)擴(kuò)大這個(gè)列表:使用NodeJS的項(xiàng)目, 應(yīng)用和公司

概念

下圖描述了 Node.js 的一些重要組成部分,我們將詳細(xì)的在后續(xù)章節(jié)進(jìn)行討論。


Node.js Concepts

在哪里可以使用Node.js?

以下是Node.js證明自己完美的技術(shù)的合作伙伴的領(lǐng)域。

  • I/O 綁定應(yīng)用程序

  • 數(shù)據(jù)流應(yīng)用

  • 數(shù)據(jù)密集型實(shí)時(shí)應(yīng)用(DIRT)

  • JSON API的應(yīng)用程序

  • 單頁面應(yīng)用

在哪些地方不要使用Node.js?

不建議使用Node.js的就是針對CPU密集型應(yīng)用。

Node.js - 環(huán)境安裝配置

如果愿意安裝設(shè)置Node.js環(huán)境,需要計(jì)算機(jī)上提供以下兩個(gè)軟件:

一、文本編輯器

二、Node.js二進(jìn)制安裝包

文本編輯器

這將用來編寫程序代碼。 一些編輯器包括:Windows記事本,OS Edit命令,Brief, Epsilon, EMACS和VIM或vi。

文本編輯器的名稱和版本的在不同的操作系統(tǒng)可能不太相同。例如,記事本可用在Windows,VIM或vi可以在Windows以及Linux或UNIX上使用。

編輯器創(chuàng)建的文件稱為源文件并包含程序的源代碼。 對于Node.js的程序的源文件名通常命名擴(kuò)展是 ".js".

在開始編程之前,請確保文本編輯器可用,并且有足夠的經(jīng)驗(yàn)來寫計(jì)算機(jī)程序,將其保存在一個(gè)文件,如:helloworld.js,編譯并執(zhí)行。

Node.js 運(yùn)行時(shí)

編寫源文件中的源代碼只需知道了解JavaScript。Node.js解釋器將用于解釋和執(zhí)行JavaScript代碼。

Node.js的發(fā)行版以二進(jìn)制安裝在SunOS,Linux,Mac OS X和Windows的32位(386)和64位(AMD64)的x86處理器架構(gòu)操作系統(tǒng)。

以下部分將指導(dǎo)如何將Node.js的二進(jìn)制分發(fā)版安裝在各種操作系統(tǒng)上。

下載Node.js的歸檔文件

下載最新版本Node.js的安裝歸檔文件在: Node.js 下載. 在寫這篇教程的時(shí)候,下載的是 node-v0.12.7-x64.msi 并復(fù)制到“桌面”。

OS Archive name
Windows node-v0.12.7-x64.msi
Linux node-v0.12.7-linux-x86.tar.gz
Mac node-v0.12.7-darwin-x86.tar.gz
SunOS node-v0.12.7-sunos-x86.tar.gz

在UNIX/Linux/Mac OS X和SunOS上安裝(可選)

解壓縮下載歸檔文件到 /usr/local, 創(chuàng)建一個(gè)NodeJs樹 /usr/local/nodejs. 例如:

tar -C /usr/local -xzf node-v0.12.0-linux-x86.tar.gz

添加 /usr/local/nodejs 到PATH環(huán)境變量。

OS 輸出
Linux export PATH=$PATH:/usr/local/nodejs
Mac export PATH=$PATH:/usr/local/nodejs
FreeBSD export PATH=$PATH:/usr/local/nodejs

在Windows上安裝Node.js(本教程中使用)

使用MSI文件,并按照提示安裝node.js,默認(rèn)情況下,安裝程序?qū)?Node.js 發(fā)行到 C:\Program Files\nodejs. 但這里我們需要修改安裝路徑到:D:\yiibai_worksp\nodejs,并將 D:\yiibai_worksp\nodejs 目錄添加到Window系統(tǒng)的PATH環(huán)境變量中。重新啟動打開命令提示符,以使更改生效。

第一步:雙擊下載的  “node-v0.12.7-x64.msi" 文件,出現(xiàn)提示安裝界面:

第二步:選擇安裝目錄,這里安裝在目錄 D:\yiibai_worksp\nodejs 中,如下圖:

第三步:選擇安裝的模塊和功能,這里全部安裝,并添加到系統(tǒng)環(huán)境變量,如下圖所示:

最后一步:安裝完成!

驗(yàn)證安裝:執(zhí)行文件

創(chuàng)建一個(gè)js文件名為test.js 在 D:\>yiibai_worksp\nodejs.

File: test.js

console.log("Hello World")

現(xiàn)在運(yùn)行test.js看到的結(jié)果:

D:\yiibai_worksp\nodejs> node test.js

驗(yàn)證輸出結(jié)果:

Node.js - 第一個(gè)應(yīng)用程序

在使用 Node.js 創(chuàng)建 Hello World ! 應(yīng)用程序之前, 讓我們看看Node.js的應(yīng)用程序的組成部分。Node.js應(yīng)用程序由以下三個(gè)重要部分組成:

  • 導(dǎo)入所需模塊: 使用require指令來加載javascript模塊

  • 創(chuàng)建一個(gè)服務(wù)器: 服務(wù)器這將聽監(jiān)聽在Apache HTTP服務(wù)器客戶端的請求。

  • 讀取請求并返回響應(yīng): 在前面的步驟中創(chuàng)建的服務(wù)器將響應(yīng)讀取由客戶機(jī)發(fā)出的HTTP請求(可以是一個(gè)瀏覽器或控制臺)并返回響應(yīng)。

創(chuàng)建Node.js應(yīng)用

步驟 1:導(dǎo)入所需的包

使用require指令來加載 HTTP 模塊。

var http = require("http")

步驟 2:使用http.createServer方法創(chuàng)建HTTP服務(wù)器。通過參數(shù)函數(shù)請求并響應(yīng)。編寫示例實(shí)現(xiàn)返回“Hello World”。服務(wù)器在8081端口監(jiān)聽。

http.createServer(function (request, response) {
   // HTTP Status: 200 : OK
   // Content Type: text/plain
   response.writeHead(200, {'Content-Type': 'text/plain'});
   // send the response body as "Hello World"
   response.end('Hello World\n');
}).listen(8081);
// console will print the message
console.log('Server running at http://127.0.0.1:8081/');

步驟 3: 創(chuàng)建一個(gè) js 文件在 helloworld.js 在 D:\>yiibai_worksp.

File: helloworld.js

var http = require("http")
http.createServer(function (request, response) {  
   response.writeHead(200, {'Content-Type': 'text/plain'});  
   response.end('Hello World\n');
}).listen(8081);
console.log('Server running at http://127.0.0.1:8081/');

現(xiàn)在運(yùn)行 helloworld.js 看到結(jié)果:

D:\yiibai_worksp\nodejs>node helloworld.js

驗(yàn)證輸出,服務(wù)器應(yīng)用已經(jīng)啟動!

Server running at http://127.0.0.1:8081/

向Node.js服務(wù)器發(fā)出請求

打開瀏覽器(IE),在地址欄中輸入:http://127.0.0.1:8081/ 在瀏覽器中,看看下面的結(jié)果。

Node.js - REPL

REPL代表讀取評估和演示打印循環(huán),它就像 Window 下的控制臺的計(jì)算機(jī)環(huán)境,或 Unix/Linux 系統(tǒng)的 Shell命令輸入響應(yīng)輸出。 Node.js或Node 捆綁了一個(gè)REPL環(huán)境。可執(zhí)行以下任務(wù)。

  • 讀取- 讀取用戶的輸入,解析輸入的JavaScript數(shù)據(jù)結(jié)構(gòu)并存儲在內(nèi)存

  • 計(jì)算- 采取并評估計(jì)算數(shù)據(jù)結(jié)構(gòu)

  • 打印- 打印結(jié)果

  • 循環(huán) - 循環(huán)上面的命令,直到用戶按Ctrl-C兩次終止

Node 的REPL 與 Node.js 的實(shí)驗(yàn)代碼非常有用,用于調(diào)試JavaScript代碼。

特點(diǎn)

REPL可以通過簡單地在shell/控制臺運(yùn)行node不帶任何參數(shù)來啟動。

D:\yiibai_worksp\nodejs> node

可以看到REPL 命令提示符:

D:\yiibai_worksp\nodejs> node
>

簡單的表達(dá)式

讓我們嘗試在REPL命令提示符下執(zhí)行簡單的數(shù)學(xué)運(yùn)算:

D:\yiibai_worksp\nodejs>node
> 1 + 3
4
> 1 + ( 2 * 3 ) - 4
3
>

使用變量

使用變量儲存值后并打印。如果不使用var關(guān)鍵字,那么值存儲在變量并打印。而如果使用var關(guān)鍵字存儲值,那么不會打印。稍后,可以使用這兩個(gè)變量。使用console.log()打印來任何東西

D:\yiibai_worksp\nodejs> node
> x = 10
10
> var y = 10
undefined
> x + y
20
> console.log("Hello World")
Hello Workd
undefined

多行表達(dá)

Node REPL支持類似于JavaScript的多表達(dá)。請參閱下列do-while循環(huán):

D:\yiibai_worksp\nodejs> node
> var x = 0
undefined
> do {
... x++;
... console.log("x: " + x);
... } while ( x < 5 );
x: 1
x: 2
x: 3
x: 4
x: 5
undefined
>

... 當(dāng)按下進(jìn)入自動打開來后括號。Node自動檢查表達(dá)式的連續(xù)性。

下劃線變量

使用_得到最后的結(jié)果。

D:\yiibai_worksp\nodejs> node
> var x = 10
undefined
> var y = 20
undefined
> x + y
30
> var sum = _
undefined
> console.log(sum)
30
undefined
>

REPL 命令

  • ctrl + c - 終止當(dāng)前命令

  • ctrl + c twice - 終止 Node REPL

  • ctrl + d - 終止 Node REPL

  • Up/Down Keys - 查看命令歷史記錄和修改以前的命令

  • tab Keys - 當(dāng)前命令列表

  • .help - 列出所有命令

  • .break - 退出多行表達(dá)

  • .clear - 從多行表達(dá)式退出

  • .save - 當(dāng)前 Node REPL會話保存到一個(gè)文件

  • .load - 加載文件的內(nèi)容到當(dāng)前Node REPL會話

D:\yiibai_worksp\nodejs> node
> var x = 10
undefined
> var y = 20
undefined
> x + y
30
> var sum = _
undefined
> console.log(sum)
30
undefined
> .save test.js
Session saved to:test.js
> .load test.js
> var x = 10
undefined
> var y = 20
undefined
> x + y
30
> var sum = _
undefined
> console.log(sum)
30
undefined
>

Node.js - npm

npm 表示節(jié)點(diǎn)程序包管理器。npm 提供以下兩個(gè)主要功能:

  • Node.js包/模塊的在線軟件倉庫,可通過搜索 search.nodejs.org

  • 命令行實(shí)用程序安裝包,作為Node.js版本管理和依賴包管理。

Node.js v0.6.3版本后才開始捆綁 npm 安裝。為了驗(yàn)證,打開控制臺,然后輸入以下命令并查看結(jié)果:

D:\yiibai_worksp\nodejs>npm --version
2.11.3

全局VS本地安裝

默認(rèn)情況下,NPM安裝在任何依賴性的本地模式。在這里,本地模式指的是包在安裝目錄node_modules,位于Node應(yīng)用的文件夾中。本地部署的包都可以通過require() 訪問 。

全局安裝的軟件包/依賴存儲在<用戶目錄>/npm目錄。 這種依賴關(guān)系可以在命令行中使用Node.js的(命令行界面)任何功能,但不能使用require()在Node直接應(yīng)用導(dǎo)入。

我們來開始安裝明確,使用本地來安裝一個(gè)流行的Web框架。

D:\yiibai_worksp\nodejs>npm install express
express@4.11.2 node_modules\express
|-- merge-descriptors@0.0.2
|-- utils-merge@1.0.0
|-- methods@1.1.1
|-- escape-html@1.0.1
|-- fresh@0.2.4
|-- cookie@0.1.2
|-- range-parser@1.0.2
|-- media-typer@0.3.0
|-- cookie-signature@1.0.5
|-- vary@1.0.0
|-- finalhandler@0.3.3
|-- parseurl@1.3.0
|-- serve-static@1.8.1
|-- content-disposition@0.5.0
|-- path-to-regexp@0.1.3
|-- depd@1.0.0
|-- qs@2.3.3
|-- debug@2.1.1 (ms@0.6.2)
|-- send@0.11.1 (destroy@1.0.3, ms@0.7.0, mime@1.2.11)
|-- on-finished@2.2.0 (ee-first@1.1.0)
|-- type-is@1.5.7 (mime-types@2.0.9)
|-- accepts@1.2.3 (negotiator@0.5.0, mime-types@2.0.9)
|-- etag@1.5.1 (crc@3.2.1)
|-- proxy-addr@1.0.6 (forwarded@0.1.0, ipaddr.js@0.1.8)

一旦NPM完成下載,可以通過查看 D:\yiibai_worksp\nodejs\node_modules 的內(nèi)容驗(yàn)證,或鍵入以下命令:

D:\yiibai_worksp\nodejs> npm ls
D:\yiibai_worksp\nodejs
|-- express@4.11.2
  |-- accepts@1.2.3
  | |-- mime-types@2.0.9
  | | |-- mime-db@1.7.0
  | |-- negotiator@0.5.0
  |-- content-disposition@0.5.0
  |-- cookie@0.1.2
  |-- cookie-signature@1.0.5
  |-- debug@2.1.1
  | |-- ms@0.6.2
  |-- depd@1.0.0
  |-- escape-html@1.0.1
  |-- etag@1.5.1
  | |-- crc@3.2.1
  |-- finalhandler@0.3.3
  |-- fresh@0.2.4
  |-- media-typer@0.3.0
  |-- merge-descriptors@0.0.2
  |-- methods@1.1.1
  |-- on-finished@2.2.0
  | |-- ee-first@1.1.0
  |-- parseurl@1.3.0
  |-- path-to-regexp@0.1.3
  |-- proxy-addr@1.0.6
  | |-- forwarded@0.1.0
  | |-- ipaddr.js@0.1.8
  |-- qs@2.3.3
  |-- range-parser@1.0.2
  |-- send@0.11.1
  | |-- destroy@1.0.3
  | |-- mime@1.2.11
  | |-- ms@0.7.0
  |-- serve-static@1.8.1
  |-- type-is@1.5.7
  | |-- mime-types@2.0.9
  |   |-- mime-db@1.7.0
  |-- utils-merge@1.0.0
  |-- vary@1.0.0

上面列出的內(nèi)容很長,這里省略了一部分。

現(xiàn)在,讓我們嘗試安裝明確,使用全局安裝流行Web框架。

D:\yiibai_worksp\nodjs> npm install express - g

一旦NPM完成下載,可以通過查看<用戶目錄>/nmp/node_modules中的內(nèi)容來驗(yàn)證?;蜉斎胍韵旅睿?/p>

D:\yiibai_worksp\nodejs> npm ls -g

以上可能會遇網(wǎng)絡(luò)問題無法安裝,需要翻墻。

安裝模塊

安裝模塊很簡單,只要鍵入以下命令。

D:\yiibai_worksp\nodejs> npm install express

現(xiàn)在,可以在 js 文件中使用它,如下:

var express = require('express');

package.json 包

package.json是存在于任何Node應(yīng)用程序/模塊的根目錄,并用于定義一個(gè)包的屬性。 讓我們打開 package.json express包在 D:\yiibai_worksp\nodejs\node_modules\express\

{
  "name": "express",
  "description": "Fast, unopinionated, minimalist web framework",
  "version": "4.11.2",
  "author": {
    "name": "TJ Holowaychuk",
    "email": "tj@vision-media.ca"
  },
  "contributors": [
    {
      "name": "Aaron Heckmann",
      "email": "aaron.heckmann+github@gmail.com"
    },
    {
      "name": "Ciaran Jessup",
      "email": "ciaranj@gmail.com"
    },
    {
      "name": "Douglas Christopher Wilson",
      "email": "doug@somethingdoug.com"
    },
    {
      "name": "Guillermo Rauch",
      "email": "rauchg@gmail.com"
    },
    {
      "name": "Jonathan Ong",
      "email": "me@jongleberry.com"
    },
    {
      "name": "Roman Shtylman",
      "email": "shtylman+expressjs@gmail.com"
    },
    {
      "name": "Young Jae Sim",
      "email": "hanul@hanul.me"
    }
  ],
  "license": "MIT",
  "repository": {
    "type": "git",
    "url": "https://github.com/strongloop/express"
  },
  "homepage": "http://expressjs.com/",
  "keywords": [
    "express",
    "framework",
    "sinatra",
    "web",
    "rest",
    "restful",
    "router",
    "app",
    "api"
  ],
  "dependencies": {
    "accepts": "~1.2.3",
    "content-disposition": "0.5.0",
    "cookie-signature": "1.0.5",
    "debug": "~2.1.1",
    "depd": "~1.0.0",
    "escape-html": "1.0.1",
    "etag": "~1.5.1",
    "finalhandler": "0.3.3",
    "fresh": "0.2.4",
    "media-typer": "0.3.0",
    "methods": "~1.1.1",
    "on-finished": "~2.2.0",
    "parseurl": "~1.3.0",
    "path-to-regexp": "0.1.3",
    "proxy-addr": "~1.0.6",
    "qs": "2.3.3",
    "range-parser": "~1.0.2",
    "send": "0.11.1",
    "serve-static": "~1.8.1",
    "type-is": "~1.5.6",
    "vary": "~1.0.0",
    "cookie": "0.1.2",
    "merge-descriptors": "0.0.2",
    "utils-merge": "1.0.0"
  },
  "devDependencies": {
    "after": "0.8.1",
    "ejs": "2.1.4",
    "istanbul": "0.3.5",
    "marked": "0.3.3",
    "mocha": "~2.1.0",
    "should": "~4.6.2",
    "supertest": "~0.15.0",
    "hjs": "~0.0.6",
    "body-parser": "~1.11.0",
    "connect-redis": "~2.2.0",
    "cookie-parser": "~1.3.3",
    "express-session": "~1.10.2",
    "jade": "~1.9.1",
    "method-override": "~2.3.1",
    "morgan": "~1.5.1",
    "multiparty": "~4.1.1",
    "vhost": "~3.0.0"
  },
  "engines": {
    "node": ">= 0.10.0"
  },
  "files": [
    "LICENSE",
    "History.md",
    "Readme.md",
    "index.js",
    "lib/"
  ],
  "scripts": {
    "test": "mocha --require test/support/env --reporter spec --bail --check-leaks test/ test/acceptance/",
    "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --require test/support/env --reporter dot --check-leaks test/ test/acceptance/",
    "test-tap": "mocha --require test/support/env --reporter tap --check-leaks test/ test/acceptance/",
    "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --require test/support/env --reporter spec --check-leaks test/ test/acceptance/"
  },
  "gitHead": "63ab25579bda70b4927a179b580a9c580b6c7ada",
  "bugs": {
    "url": "https://github.com/strongloop/express/issues"
  },
  "_id": "express@4.11.2",
  "_shasum": "8df3d5a9ac848585f00a0777601823faecd3b148",
  "_from": "express@*",
  "_npmVersion": "1.4.28",
  "_npmUser": {
    "name": "dougwilson",
    "email": "doug@somethingdoug.com"
  },
  "maintainers": [
    {
      "name": "tjholowaychuk",
      "email": "tj@vision-media.ca"
    },
    {
      "name": "jongleberry",
      "email": "jonathanrichardong@gmail.com"
    },
    {
      "name": "shtylman",
      "email": "shtylman@gmail.com"
    },
    {
      "name": "dougwilson",
      "email": "doug@somethingdoug.com"
    },
    {
      "name": "aredridel",
      "email": "aredridel@nbtsc.org"
    },
    {
      "name": "strongloop",
      "email": "callback@strongloop.com"
    },
    {
      "name": "rfeng",
      "email": "enjoyjava@gmail.com"
    }
  ],
  "dist": {
    "shasum": "8df3d5a9ac848585f00a0777601823faecd3b148",
    "tarball": "http://registry.npmjs.org/express/-/express-4.11.2.tgz"
  },
  "directories": {},
  "_resolved": "https://registry.npmjs.org/express/-/express-4.11.2.tgz",
  "readme": "ERROR: No README data found!"
}

Package.json 屬性

  • name - 包的名稱

  • version - 包的版本

  • description - 包的描述

  • homepage - 包的網(wǎng)站主頁

  • author - 包的作者

  • contributors - 包的貢獻(xiàn)者的名稱列表

  • dependencies - 依賴性列表。npm自動安裝所有在node_module文件夾中的包提到的依賴關(guān)系。

  • repository - 包的存儲庫類型和URL