本篇文章帶大家聊聊Node.js中的模組系統,內容包括events模組、util 模組、fs 模組、OS 模組、Path 模組等,希望對大家有幫助!
#參考資料:Node.js模組系統
為了讓Node.js的檔案可以互相調用,Node.js提供了一個簡單的模組系統。
模組是Node.js 應用程式的基本組成部分,檔案和模組是一一對應的。
換言之,一個 Node.js 檔案就是一個模組,這個檔案可能是JavaScript 程式碼、JSON 或編譯過的C/C 擴充。
Node.js 中存在4 個類別模組(原生模組和3種檔案模組)
例:var http = require("http");
Node.js 中自帶了一個叫做http 的模組,我們在我們的程式碼中請求它並把返回值賦給一個本地變數。
這把我們的本地變數變成了一個擁有所有 http 模組所提供的公共方法的物件。 【相關教學推薦:nodejs影片教學】
載入模組:
物件是模組公開的介面
<pre class="brush:js;toolbar:false;">//例子
//hello.js
exports.world = function() { //相当于给function()函数取了个别名world()
console.log(&#39;Hello World&#39;);
}
//main.js
var hello = require(&#39;./hello&#39;);
hello.world(); //访问 hello.js 的 world 函数
//结果
PS E:\learn> node main.js
Hello World</pre>
模組介面的唯一變化是使用module.exports = Hello 取代了exports.world = function(){}。在外部引用該模組時,其介面物件就是要輸出的 Hello 物件本身,而不是原先的 exports。exports 和module.exports 的使用
//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(); //结果 PS E:\learn> node main.js Hello BYVoid
Node.js EventEmitter
events 存取該模組。
EventEmitter模組裡面的唯一的一個類,該類別下有多個屬性
為指定事件新增一個監聽器到監聽器陣列的尾部。
on函式為指定事件註冊一個監聽器,接受一個字串 event 和一個回呼函數。
為指定事件註冊單次監聽器,即監聽器最多只會觸發一次,觸發後立刻解除該監聽器
移除指定事件的某個監聽器,監聽器必須是該事件已經註冊過的監聽器。它接受兩個參數,第一個是事件名稱,第二個是回呼函數名稱
移除所有事件的所有監聽器, 如果指定事件,則移除指定事件的所有監聽器。
預設情況下, EventEmitters 如果你加入的監聽器超過 10 個就會輸出警告訊息。 setMaxListeners 函數用於改變監聽器的預設限制的數量。
傳回指定事件的監聽器陣列。
依照監聽器的順序執行執行每個監聽器,如果事件有註冊監聽回傳true,否則回傳false。
//例子 //event.js 文件 var events = require('events'); // 引入 events 模块 var emitter = new events.EventEmitter(); // 创建 eventEmitter 对象 //为事件someEvent注册两个监视器 emitter.on('someEvent', function(arg1, arg2) { console.log('listener1', arg1, arg2); }); emitter.on('someEvent', function(arg1, arg2) { console.log('listener2', arg1, arg2); }); //按顺序执行someEvent的每个监视器 emitter.emit('someEvent', 'arg1 参数', 'arg2 参数'); // 'arg1 参数', 'arg2 参数'为参数arg1,arg2的值
//结果 $ node event.js listener1 arg1 参数 arg2 参数 listener2 arg1 参数 arg2 参数
##參考資料:
util 實用工具官網
util 是一个Node.js 核心模块,提供常用函数的集合,用于弥补核心 JavaScript 的功能 过于精简的不足。
util.callbackify(original)
将 async 异步函数(或者一个返回值为 Promise 的函数)转换成遵循异常优先的回调风格的函数
//例子 const util = require('util'); async function fn() { return 'hello world'; } const callbackFunction = util.callbackify(fn); callbackFunction((err, ret) => { if (err) throw err; console.log(ret); }); //结果 hello world
util.inherits(constructor, superConstructor)
是一个实现对象间原型继承的函数。
//例子 var util = require('util'); //Base构造函数内三个属性 function Base() { this.name = 'base'; this.base = 1991; this.sayHello = function() { console.log('Hello ' + this.name); }; } //原型中定义的一个函数 Base.prototype.showName = function() { console.log(this.name); }; //Sub构造函数内一个属性 function Sub() { this.name = 'sub'; } util.inherits(Sub, Base); //Sub从Base继承 var objBase = new Base(); objBase.showName(); objBase.sayHello(); console.log(objBase); var objSub = new Sub(); objSub.showName(); //objSub.sayHello(); console.log(objSub); //结果 base Hello base { name: 'base', base: 1991, sayHello: [Function] } sub { name: 'sub' } //Base 有 name , base , sayHello() , showName() //Sub 有 name(自己定义的,不是继承的) , showName() 从Base继承的
util.inspect(object,[showHidden],[depth],[colors])
是一个将任意对象转换 为字符串的方法,通常用于调试和错误输出。它至少接受一个参数 object,即要转换的对象。var util = require('util'); function Person() { this.name = 'byvoid'; this.toString = function() { return this.name; }; } var obj = new Person(); console.log(obj); console.log(util.inspect(obj)); console.log(util.inspect(obj, true));
参考资料:Node.js 文件系统
Node.js 文件系统模块 官网fs.open(path, flags[, mode], callback)
在异步模式下打开文件
参数:
callback(err, fd)
r
以读取模式打开文件。如果文件不存在抛出异常。r+
以读写模式打开文件。如果文件不存在抛出异常。rs
以同步的方式读取文件。rs+
以同步的方式读取和写入文件。w
以写入模式打开文件,如果文件不存在则创建。wx
类似 ‘w’,但是如果文件路径存在,则文件写入失败。w+
以读写模式打开文件,如果文件不存在则创建。wx+
类似 ‘w+’, 但是如果文件路径存在,则文件读写失败。a
以追加模式打开文件,如果文件不存在则创建。ax
类似 ‘a’, 但是如果文件路径存在,则文件追加失败。a+
以读取追加模式打开文件,如果文件不存在则创建。ax+
类似 ‘a+’, 但是如果文件路径存在,则文件读取追加失败。
fs.stat(path, callback)
通过异步模式获取文件信息
callback(err, stats)
, stats 是 fs.Stats 对象。fs.stat(path)执行后,会将stats类的实例返回给其回调函数。可以通过stats类中的提供方法判断文件的相关属性
stats.isFile()
如果是文件返回 true,否则返回 false。stats.isDirectory()
如果是目录返回 true,否则返回 false。stats.isBlockDevice()
如果是块设备返回 true,否则返回 false。stats.isCharacterDevice()
如果是字符设备返回 true,否则返回 false。stats.isSymbolicLink()
如果是软链接返回 true,否则返回 false。stats.isFIFO()
如果是FIFO,返回true,否则返回 false。FIFO是UNIX中的一种特殊类型的命令管道。stats.isSocket()
如果是 Socket 返回 true,否则返回 false。
fs.writeFile(file, data[, options], callback)
异步模式下写入文件
writeFile 直接打开文件默认是 w 模式,所以如果文件存在,该方法写入的内容会覆盖旧的文件内容。
fs.read(fd, buffer, offset, length, position, callback)
非同步模式下讀取文件,該方法使用了文件描述符來讀取文件。
fs.close(fd, callback)
在非同步模式下關閉文件,該方法使用了文件描述符來讀取文件。
fs.ftruncate(fd, len, callback)
非同步模式下截取文件,該方法使用了文件描述符來讀取文件。
fs.unlink(path, callback)
刪除檔案的語法格式:
fs.mkdir(path[, options], callback)
建立目錄
fs.readdir(path, callback)
讀取目錄
fs.rmdir(path, callback) 刪除目錄
Node.js OS 模組 屬性:
os.EOL 定義了作業系統的行尾符的常數。
方法:
os.tmpdir() 傳回作業系統的預設暫存資料夾
os.endianness() 傳回CPU 的位元組序,可能的是“BE” 或“LE”。
os.hostname() 傳回作業系統的主機名稱。
os.type() 傳回作業系統名稱
os.platform() 傳回編譯時的作業系統名稱
os.arch() 傳回作業系統CPU 架構,可能的值有「x64」、「arm」 和「ia32」。
os.release() 傳回作業系統的發行版本。
os.uptime() 傳回作業系統運作的時間,以秒為單位。
os.loadavg() 傳回一個包含 1、5、15 分鐘平均負載的陣列。
os.totalmem() 傳回系統記憶體總量,單位為位元組。
os.freemem() 傳回作業系統空閒記憶體量,單位是位元組。
os.cpus() 傳回物件數組,包含所安裝的每個CPU/核心的資訊:型號、速度(單位MHz)、時間(一個包含user、nice、sys、idle和irq 所使用CPU/核心毫秒數的物件)。
os.networkInterfaces() 取得網路介面清單。
參考資料:Node,js Web模組
更多node相關知識,請造訪:nodejs 教學 !
以上是Node學習之聊模組系統的詳細內容。更多資訊請關注PHP中文網其他相關文章!