Node採用Google開發的V8引擎運行js代碼,使用事件驅動、非阻塞和異步I/O模型等技術來提升性能,可優化應用程序的傳輸量和規模。html
Node大部分基本模塊都用JavaScript編寫。在Node出現以前,JS一般做爲客戶端程序設計語言使用,以JS寫出的程序常在用戶的瀏覽器上運行。node
Node主要用於編寫像Web服務器同樣的網絡應用,這和PH 和Python是相似的。算法
可是Node與其餘語言最大的不一樣之處在於,PHP等語言是阻塞的而Node是非阻塞的。npm
Node是事件驅動的。開發者能夠在不使用線程的狀況下開發出一個可以承載高併發的服務器。其餘服務器端語言難以開發高併發應用,並且即便開發出來,性能也不盡人意。編程
Node.js容許經過JS和一系列模塊來編寫服務器端應用和網絡相關的應用。json
核心模塊包括文件系統I/O、網絡(HTTP、TCP、UDP、DNS、TLS/SSL等)、二進制數據流、加密算法、數據流等等。Node模塊的API形式簡單,下降了編程的複雜度。後端
使用框架能夠加速開發。經常使用的Node框架有Express.js、Socket.IO和Connect等。Node.js的程序能夠在Microsoft Windows、Linux、Unix、Mac OS X等服務器上運行。api
Web服務API,好比REST跨域
實時多人遊戲數組
後端的Web服務,例如跨域、服務器端的請求
基於Web的應用
CommonJS規範的提出,主要是爲了彌補當前JavaScript沒有模塊化標準的缺陷。
CommonJS規範爲JS指定了一個美好的願景,但願JS可以在任何地方運行。
CommonJS對模塊的定義十分簡單:
模塊引用
模塊定義
模塊標識
(function(exports, require, module, __filename, __dirname) { // 頂部添加該行 // 模塊實際代碼 }); // 底部添加該行
function(exports, require, module, __filename, __dirname) { var a = 123; // 局部變量 b = '你好'; // 全局變量
var math = require("./math"); // 使用相對路徑引入外部模塊 var fs = require("fs"); // 使用模塊標識引入外部模塊
// module1.js
exports.a = "123"
// module2.js
var module1 = require('./module1.js')
console.log(module1) // 運行module2.js,可輸出123
var str = "abc"; var buf = Buffer.from(str , "utf-8");
console.log(buf.length); // 佔用內存的大小 --- 3
console.log(str.length);// 字符串的長度 --- 3
console.log(buf); // Buffer --- <Buffer 61 62 63>
//建立一個10個字節的buffer var buf1 = new Buffer(10); // buffer構造函數不推薦使用的 var buf2 = Buffer.alloc(10); // 推薦使用
// 能夠經過索引操做Buffer中的元素
var fs = require("fs"); //打開文件 var fd = fs.openSync("hello.txt" , "w"); //向文件中寫入內容 fs.writeSync(fd , "12345678", 2); //關閉文件 fs.closeSync(fd);
注:異步調用的方法,結果都是經過回調函數的參數返回的
var fs = require("fs"); //打開文件 fs.open("hello2.txt","w",function (err , fd) { //判斷是否出錯 if(!err){ //若是沒有出錯,則對文件進行寫入操做 fs.write(fd,"這是異步寫入的內容",function (err) { if(!err){ console.log("寫入成功"); } //關閉文件 fs.close(fd , function (err) { if(!err){ console.log("文件已關閉"); } }); }); }else{ console.log(err); } });
var fs = require("fs"); fs.writeFile("hello.txt","這是經過writeFile寫入的內容",{flag:"w"} , function (err) { if(!err){ console.log("寫入成功~~~"); }else{ console.log(err); } });
var fs = require("fs"); var ws = fs.createWriteStream("hello3.txt"); // 建立一個可寫流 ws.once("open",function () { // 監聽流的打開 console.log("流打開了"); }); ws.once("close",function () { // 監聽流的關閉 console.log("流關閉了"); }); ws.write("經過可寫流寫入文件的內容"); // 寫入內容 ws.end(); // 關閉流
var fs = require("fs"); var path = "C:/Users/lilichao/Desktop/筆記.mp3"; fs.readFile("an.jpg" , function (err , data) { if(!err){ //console.log(data); //將data寫入到文件中 fs.writeFile("C:/Users/lilichao/Desktop/hello.jpg",data,function(err){ if(!err){ console.log("文件寫入成功"); } } ); } });
// 流式文件讀取也適用於一些比較大的文件,能夠分屢次將文件讀取到內存中 var fs = require('fs'); var rs = fs.createReadStream('b.mp3') var ws = fs.createWriteStream('a.mp3') rs.once('open', function () { console.log('可讀流打開了') }) rs.once('close', function () { console.log('可讀流關閉了') // 數據讀取完畢,關閉可寫流 ws.end() }) ws.once('open', function () { console.log('可寫流打開了') }) ws.once('close', function () { console.log('可寫流關閉了') }) // pipe 可把可讀流中的內容直接輸出到可寫流中 rs.pipe(ws);