NodeJs(一)
NodeJs簡介
Node.js 是一個基于 Chrome V8 引擎的 JavaScript 運行環境。node.js 使用了一個事件驅動、非阻塞式 I/O 的模型,使其輕量又高效。?
中文文檔:http://nodejs.cn/api/
環境變量
????當我們在命令行窗口打開一個文件,或調用一個程序時,系統會首先在當前目錄下尋找文件程序,如果找到了則直接打開。
如果沒有找到則會依次到環境變量path的路徑中尋找,直到找到為止,如果沒找到則報錯。
I/O(Input/Output)
????I/O操作指的是對磁盤的讀寫操作
Node基礎
????Node是一個對ES標準一個實現,Node也是一個JS引擎,通過Node可以使js代碼在服務器端執行
????Node是一款使用js編寫的web服務器,底層是C++編寫,node中js引擎使用的使用的是chrome的v8引擎
????Node的特點:
????????1、非阻塞、異步的I/O
????????2、事件和回調函數
????????3、單線程(主線程單線程,后臺I/O線程池)
????????4、跨平臺
????Node僅僅對ES標準進行了實現,所以在Node中不包含DOM和BOM
????Node中可以使用所有的內建對象
????????String、Number、Boolean、Math、Date、RegExp、Function、Object、Array
????而BOM和DOM都不能使用,但是可以使用console,也可以使用定時器(setTimeOut()、setInterval())
????Node可以在后臺來編寫服務器,Node編寫服務器都是單線程的服務器
????????-進程:進程就是一個一個的工作計劃
????????-線程:線程是計算機最小的運算單位
????傳統的服務器都是多線程的:每進來一個請求,就創建一個線程去處理請求
????Node的服務器是單線程:Node處理請求時是單線程,但是在后臺擁有一個I/O線程池
模塊化? ?
ES5中沒有原生支持模塊化,我們只能通過script標簽引入js文件來實現模塊化
????在node中為了對模塊管理,引入了CommonJS規范
????模塊的引用:使用require()函數來引入一個模塊
????模塊的定義:在node中一個js文件就是一個模塊
????????默認情況下在js文件中編寫的內容,都是運行在一個獨立的函數中,外部的模塊無法訪問
????????導出變量和函數:
????????????-使用exports
????????????????exports.屬性=屬性值
????????????????exports.方法=函數
????????????-使用module.exports????????
????????????????module.exports.屬性 = 屬性值;
????????????????module.exports.方法 = 函數;
????????????????module.exports = {};
????模塊的標識:模塊的標識就是模塊的名字或者路徑
????????node中通過模塊的標識來尋找模塊的
????????對于核心模塊(npm中下載的模塊),直接使用模塊的名字對其進行引入
????????????var fs=require("fs")
????????對于自定義的文件模塊,需要通過文件的路徑來對模塊進行引入
??包(package)
????將多個模塊組合為一個完整的功能,就是一個包
????包結構
????????-bin:二進制的可執行文件,一般都是一些工具包這中才有
????????-lib:js文件
????????-doc:文檔
????????-test:測試代碼
????????package.json:包的描述文件,包含了包各種相關信息:name、version、dependencies、main、bin
npm(Node Package Manager Node的包管理器)
????通過npm可以對node中的包進行上傳、下載、搜索等操作。npm會在安裝完node以后自動安裝。
????npm的常用指令
????????npm -v:查看npm的版本
????????npm version:查看所有模塊的版本
????????npm init:初始化項目(創建package.json)
????????npm i/install 包名:安裝指定的包
????????npm i/install 包名 --save:安裝指定的包并添加依賴
????????npm i/install 包名 -g:全局安裝(一般是某些工具)
????????npm i/install:安裝當前項目所依賴的包
????????npm s/search:包名 搜索包????
????????npm r/remove:包名 刪除一個包
文件系統(File System)
?緩沖區
????????Buffer和數組的結構非常類似,Buffer是用來存儲二進制數據的
????????Buffer的方法
????????????-Buffer.from(字符串):將一個字符串中內容保存到一個Buffer中
????????????-buf.toString():將buffer轉換為一個字符串
????????????-Buffer.alloc(size):創建一個指定大小的buffre對象
????????????-Buffer.allocUnsafe(size):創建一個指定大小的buffer對象,可以包含敏感數據
fs模塊
????????在Node通過fs模塊來對系統中的文件進行操作,fs模塊是node中已經繼承好了,不需要在npm下載,直接引入即可。
????????引入fs:var fs =require("fs"),fs模塊中的大部分操作都提供了兩種方法,同步方法(帶sync)和異步方法。
????????寫入文件:1、同步寫入 2、異步寫入 3、簡單寫入 4、流式寫入
????????讀取文件:1、同步讀取 2、異步讀取 3、簡單讀取 4、流式讀取
????????方法:
????????-打開文件
????????????fs.open(path,flags[,model],callback)
????????????fs.openSync(path,flags[,model])
????????????注:flag為讀取文件的方式,r只讀,w可寫
????????-讀寫文件
????????????fs.write(fd, string[, position[, encoding]], callback)
????????????fs.writeSync(fd, string[, position[, encoding]])
????????????
????????????fs.read(fd, buffer, offset, length, position, callback)
????????????fs.readSync(fd, buffer, offset, length, position)
????????
????????-關閉文件
????????????fs.close(fd,callback)
????????????fs.closeSync(fd)
????????????
????????- 簡單文件讀取和寫入
????????????fs.writeFile(file, data[, options], callback)
????????????fs.writeFileSync(file, data[, options])
????????????fs.readFile(path[, options], callback)
????????????fs.readFileSync(path[, options])
????????- 流式文件讀取和寫入
????????????- 流式讀取和寫入適用于一些比較大的文件
????????????????fs.createWriteStream(path[, options])
????????????????fs.createReadStream(path[, options])
轉載于:https://www.cnblogs.com/hucheng1997/p/11152777.html
總結
- 上一篇: 【大数据】分布式集群部署
- 下一篇: Java Socket NIO