Node.js = Javascript + 本地/服務器文件讀寫刪除等功能。html
簡單的說 Node.js 就是運行在服務端的 JavaScript。執行在瀏覽器上的時候成爲JavaScript,執行在服務器上的時候叫作Node.js。固然寫法是有區別的。node
JavaScript受限於瀏覽器沙盒模式,只能運行在瀏覽器中。而Node.js拓展了JavaScript的功能,使其能夠運行在本地/服務器。jquery
它不是後端語言,可是能夠用來寫後端程序。git
Node.js 是一個基於Chrome JavaScript 運行時創建的一個平臺。express
Node.js是一個事件驅動I/O服務端JavaScript環境,基於Google的V8引擎,V8引擎執行Javascript的速度很是快,性能很是好。npm
在官方網站下載長效支持版本(LTS)便可。可使用 node -v 查看安裝的node版本。json
在終端中輸入 node能夠進入node的控制檯模式,進入以後命令行(終端)的符號會由$變爲>,表明已經進入node的控制檯模式。一個小例子:gulp
① 若是要在控制檯執行某個外部代碼文件,好比執行index.js,咱們能夠用cd命令進入該目錄以後輸入 node index.js 後端
② 若是把其餘的js文件引入到當前的js文件中,代碼以下:瀏覽器
var x = require ('./index2') (引入當前目錄下的index2.js到當前文件)
control + c 是退出當前程序的組合鍵,咱們可使用 control + c 來退出node控制檯模式。
REPL 命令
ctrl + c - 退出當前終端。
ctrl + c 按下兩次 - 退出 Node REPL。
ctrl + d - 退出 Node REPL.
向上/向下 鍵 - 查看輸入的歷史命令
tab 鍵 - 列出當前命令
.help - 列出使用命令
.break - 退出多行表達式
.clear - 退出多行表達式
.save filename - 保存當前的 Node REPL 會話到指定文件
.load filename - 載入當前 Node REPL 會話的文件內容。
NPM的全稱是Node Package Manager,是隨同NodeJS一塊兒安裝的包管理和分發工具。
它能夠很方便地讓JavaScript開發者下載、安裝、上傳以及管理已經安裝的包。
安裝node.js以後,系統會自動安裝npm。使用 npm -v 命令能夠查看安裝的版本號。
命令: npm init
先用 cd 命令進入要操做的文件夾,而後使用 npm init 命令指定讓npm控制當前目錄。輸入並回車以後會出現以下提示:
在這裏輸入項目的名稱、版本號、項目描述等信息,回車則填寫括號裏面的默認內容。
初始化以後,文件夾中會有一個初始化配置文件package.json。
Package.json 屬性說明
name - 包名。
version - 包的版本號。
description - 包的描述。
homepage - 包的官網 url 。
author - 包的做者姓名。
contributors - 包的其餘貢獻者姓名。
dependencies - 依賴包列表。若是依賴包沒有安裝,npm 會自動將依賴包安裝在 node_module 目錄下。
repository - 包代碼存放的地方的類型,能夠是 git 或 svn,git 可在 Github 上。
main - main 字段是一個模塊ID,它是一個指向你程序的主要項目。就是說,若是你包的名字叫 express,而後用戶安裝它,而後require("express")。
keywords - 關鍵字
使用npm咱們能夠很方便的安裝各類包。
好比安裝jQuery,能夠這樣寫
npm install jquery --save
若是想制定要安裝的版本的jQuery,能夠寫:
npm install jquery@2 --save npm 會自動安裝jQuery2的最高版本。
--save是安裝到當前文件夾的意思,若是想安裝到全局(全局依賴),可使用 -g
好比咱們要全局安裝gulp,可使用 npm install gulp -g ,這時的安裝路徑爲/usr/local/bin/(以MAC OS爲例)
使用-dev能夠在配置文件中標註項目依賴了哪些包,寫法 --save-dev (開發階段通常使用這個)
經過-Dev生成的配置文件裏面註明了須要安裝的包的清單,在多人共同開發時,經過這個配置文件,能夠經過命令行(終端)快速安裝本身電腦上面沒有的包。經過命令行(終端)進入根目錄,使用 npm install 命令能夠根據dependencies配置安裝全部的依賴包。
你們都知道國內直接使用 npm 的官方鏡像是很是慢的,這裏推薦使用淘寶 NPM 鏡像。
淘寶 NPM 鏡像是一個完整 npmjs.org 鏡像,你能夠用此代替官方版本(只讀),同步頻率目前爲 10分鐘一次以保證儘可能與官方服務同步。
在命令行(終端)輸入以下代碼:
npm install -g cnpm --registry=https://registry.npm.taobao.org
而後就能夠經過 cnpm install *** -save 的命令來安裝各類包了。
http://www.cnblogs.com/PeunZhang/p/5553574.html#npm-update
模塊是node.js應用程序的基本組成部分。
每個js文件都是一個模塊。
爲了讓Node.js文件相互調用而提供的系統稱爲模塊系統。
全部默認自帶的模塊直接用模塊名就能夠引用。
引入 required 模塊:咱們可使用 require 指令來載入 Node.js 模塊。
建立服務器:服務器能夠監聽客戶端的請求,相似於 Apache 、Nginx 等 HTTP 服務器。
接收請求與響應請求 服務器很容易建立,客戶端可使用瀏覽器或終端發送 HTTP 請求,服務器接收請求後返回響應數據。
咱們使用 require 指令來載入 http 模塊,並將實例化的 HTTP 賦值給變量 http,實例以下:
var http = require("http");
接下來咱們使用 http.createServer() 方法建立服務器,並使用 listen 方法綁定 8888 端口。
函數經過 request, response 參數來接收和響應數據。
實例以下,在你項目的根目錄下建立一個叫 server.js 的文件,並寫入如下代碼:
var http = require('http'); var server = http.createServer(function (request, response) {
//這裏的參數使用了回調函數,回調函數的執行是不按順序的,不須要等待文件讀取完,在讀取文件的同時執行接下來的代碼,大大提升了程序的性能 // 發送 HTTP 頭部 // HTTP 狀態值: 200 : OK // 內容類型: text/plain response.writeHead(200, {'Content-Type': 'text/plain'}); // 發送響應數據 "Hello World" response.end('Hello World\n'); })
server.listen(8888); // 終端打印以下信息 console.log('Server running at http://127.0.0.1:8888/');
(關於Node.js的回調函數更詳細的介紹能夠看這篇 http://www.runoob.com/nodejs/nodejs-callback.html )
以上代碼咱們完成了一個能夠工做的 HTTP 服務器。
使用 node 命令執行以上的代碼:
node server.js Server running at http://127.0.0.1:8888/
接下來,打開瀏覽器訪問 http://127.0.0.1:8888/,你會看到一個寫着 "Hello World"的網頁。
原生模塊與文件模塊
原生模塊在nodejs安裝時便存在,經過require(‘模塊名’)引用。
文件模塊通常爲用戶創建—require(‘完整模塊路徑’)引用。引用了一個外部js文件,即引用了一個模塊,也就是建立了一個模塊。
exports 是模塊公開的接口。
require 用於從外部獲取一個模塊的接口,即所獲取模塊的 exports 對象。
在一個 js 中經過 require('./xxx') 加載這個模塊,而後就能夠直接訪 問 xxx.js 中 exports 對象的成員函數了。
有時候咱們只是想把一個對象封裝到模塊中,格式以下:
module.exports = function() { // ... }
例如:
//hello.js function Hello() { var name; this.setName = function(thyName) { name = thyName; }; this.sayHello = function() { console.log('Hello ' + name); }; }; module.exports = Hello;
這樣就能夠直接得到這個對象了:
//main.js var Hello = require('./hello'); hello = new Hello(); hello.setName('BYVoid'); hello.sayHello();
模塊接口的惟一變化是使用 module.exports = Hello 代替了exports.world = function(){}。
在外部引用該模塊時,其接口對象就是要輸出的 Hello 對象自己,而不是原先的 exports。
module.exports與exports的不一樣
JavaScript 中有一個特殊的對象,稱爲全局對象(Global Object),它及其全部屬性均可以在程序的任何地方訪問,即全局變量。
在瀏覽器 JavaScript 中,一般 window 是全局對象,window在瀏覽器環境中可用(在瀏覽器的控制檯中可用),node.js中沒有window,因此dom對象在node.js中無效。
而 Node.js 中的全局對象是 global,全部全局變量(除了 global 自己之外)都是 global 對象的屬性。在 Node.js 咱們能夠直接訪問到 global 的屬性,而不須要在應用中包含它。
global 最根本的做用是做爲全局變量的宿主。
當你定義一個全局變量時,這個變量同時也會成爲全局對象的屬性。
注意: 永遠使用 var 定義變量以免引入全局變量,由於全局變量會污染命名空間,提升代碼的耦合風險。
process 是一個全局變量,即 global 對象的屬性。
Process 提供了不少有用的屬性,便於咱們更好的控制系統的交互。
在node控制檯模式輸入process並回車,能夠看到process的全部屬性。