首頁  >  文章  >  web前端  >  Node學習之聊模組系統

Node學習之聊模組系統

青灯夜游
青灯夜游轉載
2023-01-30 20:10:222312瀏覽

本篇文章帶大家聊聊Node.js中的模組系統,內容包括events模組、util 模組、fs 模組、OS 模組、Path 模組等,希望對大家有幫助!

Node學習之聊模組系統

模組系統

#參考資料: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影片教學

載入模組:

  • 從檔案模組快取
  • #從原生模組載入
  • 從檔案載入
    • require方法接受以下幾種參數的傳遞:
      • http、fs、path、events、util等,原生模組。
      • ./mod或…/mod,相對路徑的檔案模組。
      • /pathtomodule/mod,絕對路徑的檔案模組。
      • mod,非原生模組的檔案模組。

#模組介面

  • exports 物件是模組公開的介面
require
    物件用於從外部取得一個模組的接口,即所取得模組的exports 物件。
  • <pre class="brush:js;toolbar:false;">//例子 //hello.js exports.world = function() { //相当于给function()函数取了个别名world() console.log(&amp;#39;Hello World&amp;#39;); } //main.js var hello = require(&amp;#39;./hello&amp;#39;); hello.world(); //访问 hello.js 的 world 函数 //结果 PS E:\learn&gt; node main.js Hello World</pre>
    只是想把一個物件封裝到模組中:
  • module.exports = function() {...}
模組介面的唯一變化是使用module.exports = Hello 取代了exports.world = function(){}。在外部引用該模組時,其介面物件就是要輸出的 Hello 物件本身,而不是原先的 exports。


exports 和module.exports 的使用

如果要對外暴露屬性或方法,就用exports 就行,要暴露物件(類似class,包含了很多屬性和方法),就用module.exports。
//hello.js 
function Hello() { 
    var name; 
    this.setName = function(thyName) { 
        name = thyName; 
    }; 
    this.sayHello = function() { 
        console.log(&#39;Hello &#39; + name); 
    }; 
}; 
module.exports = Hello;   

//main.js 
var Hello = require(&#39;./hello&#39;); 
hello = new Hello(); 
hello.setName(&#39;BYVoid&#39;); 
hello.sayHello();

//结果
PS E:\learn> node main.js
Hello BYVoid

events模組

參考資料:
Node.js EventEmitter

    #events 模組只提供了一個物件: events.EventEmitter。 EventEmitter 的核心就是事件觸發與事件監聽器功能的封裝。
  • events
  • 為一個模組,用
  • require("events"); 存取該模組。 EventEmitter
      相當於
    • events模組裡面的唯一的一個類,該類別下有多個屬性
    • addListener(event, listener) 為指定事件新增一個監聽器到監聽器陣列的尾部。
    • on(event, listener) on函式為指定事件註冊一個監聽器,接受一個字串 event 和一個回呼函數。
    • once(event, listener) 為指定事件註冊單次監聽器,即監聽器最多只會觸發一次,觸發後立刻解除該監聽器
    • #removeListener(event, listener)移除指定事件的某個監聽器,監聽器必須是該事件已經註冊過的監聽器。它接受兩個參數,第一個是事件名稱,第二個是回呼函數名稱
    • removeAllListeners([event]) 移除所有事件的所有監聽器, 如果指定事件,則移除指定事件的所有監聽器。
    • setMaxListeners(n) 預設情況下, EventEmitters 如果你加入的監聽器超過 10 個就會輸出警告訊息。 setMaxListeners 函數用於改變監聽器的預設限制的數量。
    • listeners(event) 傳回指定事件的監聽器陣列。
    • emit(event, [arg1], [arg2], [...]) 依照監聽器的順序執行執行每個監聽器,如果事件有註冊監聽回傳true,否則回傳false。
    listenerCount(emitter, event)
  • 傳回指定事件的監聽器數量。

//例子
//event.js 文件
var events = require(&#39;events&#39;);            // 引入 events 模块
var emitter = new events.EventEmitter();   // 创建 eventEmitter 对象
//为事件someEvent注册两个监视器
emitter.on(&#39;someEvent&#39;, function(arg1, arg2) { 
    console.log(&#39;listener1&#39;, arg1, arg2); 
}); 
emitter.on(&#39;someEvent&#39;, function(arg1, arg2) { 
    console.log(&#39;listener2&#39;, arg1, arg2); 
}); 
//按顺序执行someEvent的每个监视器
emitter.emit(&#39;someEvent&#39;, &#39;arg1 参数&#39;, &#39;arg2 参数&#39;);  // &#39;arg1 参数&#39;, &#39;arg2 参数&#39;为参数arg1,arg2的值
//结果
$ node event.js 
listener1 arg1 参数 arg2 参数
listener2 arg1 参数 arg2 参数

#util 模組


##參考資料:
util 實用工具官網

Node.js 常用工具######

util 是一个Node.js 核心模块,提供常用函数的集合,用于弥补核心 JavaScript 的功能 过于精简的不足。

util.callbackify(original)
将 async 异步函数(或者一个返回值为 Promise 的函数)转换成遵循异常优先的回调风格的函数

  • 参数:original 为 async 异步函数。
  • 返回值:返回传统回调函数(或者一个返回值为 Promise 的函数)
    • 在返回的回调函数中,第一个参数为拒绝的原因(如果 Promise 解决,则为 null),第二个参数则是解决的值。
//例子
const util = require(&#39;util&#39;);

async function fn() {
  return &#39;hello world&#39;;
}
const callbackFunction = util.callbackify(fn);

callbackFunction((err, ret) => {
  if (err) throw err;
  console.log(ret);
});

//结果
hello world

util.inherits(constructor, superConstructor) 是一个实现对象间原型继承的函数。

//例子
var util = require(&#39;util&#39;); 
//Base构造函数内三个属性
function Base() {    
    this.name = &#39;base&#39;; 
    this.base = 1991; 
    this.sayHello = function() { 
    console.log(&#39;Hello &#39; + this.name); 
    }; 
} 

//原型中定义的一个函数
Base.prototype.showName = function() { 
    console.log(this.name);
}; 

//Sub构造函数内一个属性
function Sub() { 
    this.name = &#39;sub&#39;; 
} 

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: &#39;base&#39;, base: 1991, sayHello: [Function] } 
sub 
{ name: &#39;sub&#39; }
//Base 有 name , base , sayHello() , showName()
//Sub  有 name(自己定义的,不是继承的) , showName() 从Base继承的
  • util.inspect(object,[showHidden],[depth],[colors]) 是一个将任意对象转换 为字符串的方法,通常用于调试和错误输出。它至少接受一个参数 object,即要转换的对象。
    • 它至少接受一个参数 object,即要转换的对象。
    • showHidden 是一个可选参数,如果值为 true,将会输出更多隐藏信息。
    • depth 表示最大递归的层数,如果对象很复杂,你可以指定层数以控制输出信息的多 少。如果不指定depth,默认会递归 2 层,指定为 null 表示将不限递归层数完整遍历对象。
    • 如果 colors 值为 true,输出格式将会以 ANSI 颜色编码,通常用于在终端显示更漂亮 的效果。
var util = require(&#39;util&#39;); 
function Person() { 
    this.name = &#39;byvoid&#39;; 
    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學習之聊模組系統

fs 模块

参考资料:Node.js 文件系统
Node.js 文件系统模块 官网
fs.open(path, flags[, mode], callback) 在异步模式下打开文件

  • 参数:

    • path - 文件的路径。
    • flags - 文件打开的行为。具体值详见下文。
    • mode - 设置文件模式(权限),文件创建默认权限为 0666(可读,可写)。
    • callback - 回调函数,带有两个参数如:callback(err, fd)

    r 以读取模式打开文件。如果文件不存在抛出异常。
    r+ 以读写模式打开文件。如果文件不存在抛出异常。
    rs 以同步的方式读取文件。
    rs+ 以同步的方式读取和写入文件。
    w 以写入模式打开文件,如果文件不存在则创建。
    wx 类似 ‘w’,但是如果文件路径存在,则文件写入失败。
    w+ 以读写模式打开文件,如果文件不存在则创建。
    wx+ 类似 ‘w+’, 但是如果文件路径存在,则文件读写失败。
    a 以追加模式打开文件,如果文件不存在则创建。
    ax 类似 ‘a’, 但是如果文件路径存在,则文件追加失败。
    a+ 以读取追加模式打开文件,如果文件不存在则创建。
    ax+ 类似 ‘a+’, 但是如果文件路径存在,则文件读取追加失败。

fs.stat(path, callback) 通过异步模式获取文件信息

  • 参数:
    • 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 模式,所以如果文件存在,该方法写入的内容会覆盖旧的文件内容。

  • 參數:
    • file - 檔案名稱或檔案描述子。
    • data - 要寫入檔案的數據,可以是 String(字串) 或 Buffer(緩衝) 物件。
    • options - 此參數是一個對象,包含 {encoding, mode, flag}。預設編碼為utf8, 模式為0666 ,flag 為'w'
    • callback - 回呼函數,回呼函數只包含錯誤訊息參數(err),在寫入失敗時回傳

fs.read(fd, buffer, offset, length, position, callback) 非同步模式下讀取文件,該方法使用了文件描述符來讀取文件。

  • 參數:
    • fd - 透過 fs.open() 方法傳回的檔案描述子。
    • buffer - 資料寫入的緩衝區。
    • offset - 緩衝區寫入的寫入偏移量。
    • length - 要從檔案讀取的位元組數。
    • position - 檔案讀取的起始位置,如果 position 的值為 null,則會從目前檔案指標的位置讀取。
    • callback - 回呼函數,有三個參數err, bytesRead, buffer,err 為錯誤訊息, bytesRead 表示讀取的位元組數,buffer 為緩衝區物件。

fs.close(fd, callback) 在非同步模式下關閉文件,該方法使用了文件描述符來讀取文件。

  • 參數:
    • fd - 透過 fs.open() 方法傳回的檔案描述子。
    • callback - 回呼函數,沒有參數。

fs.ftruncate(fd, len, callback) 非同步模式下截取文件,該方法使用了文件描述符來讀取文件。

  • 參數:
    • fd - 透過 fs.open() 方法傳回的檔案描述子。
    • len - 檔案內容截取的長度。
    • callback - 回呼函數,沒有參數。

fs.unlink(path, callback) 刪除檔案的語法格式:

  • 參數:
    • path - 檔案路徑。
    • callback - 回呼函數,沒有參數。

fs.mkdir(path[, options], callback) 建立目錄

  • 參數:
    • path - 檔案路徑
    • options 參數可以是
      • recursive - 是否以遞歸的方式建立目錄,預設為false。
      • mode - 設定目錄權限,預設為 0777。
    • callback - 回呼函數,沒有參數。

fs.readdir(path, callback) 讀取目錄

  • 參數:
      ##path - 檔案路徑
    • callback - 回呼函數,回呼函數帶有兩個參數err, files,err 為錯誤訊息,files 為目錄下的檔案陣列列表

fs.rmdir(path, callback) 刪除目錄

    #參數:
    • path - 檔案路徑
    • callback - 回呼函數,沒有參數。

OS 模組

#參考資料:

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() 取得網路介面清單。

Path 模組

Node.js Path 模組

Net 模組

Node.js Net 模組

DNS 模組

Node.js DNS 模組

Domain 模組

Node.js Domain 模組

http 模組

參考資料:Node,js Web模組

url 模組

gulp 模組

#ES6 環境建構

Webpack 模組

Webpack 入門教學

更多node相關知識,請造訪:nodejs 教學

以上是Node學習之聊模組系統的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:csdn.net。如有侵權,請聯絡admin@php.cn刪除