您好,登錄后才能下訂單哦!
本篇內容介紹了“Node模塊系統有哪些差數”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
為了讓Node.js的文件可以相互調用,Node.js提供了一個簡單的模塊系統。
模塊是Node.js 應用程序的基本組成部分,文件和模塊是一一對應的。
換言之,一個 Node.js 文件就是一個模塊,這個文件可能是JavaScript 代碼、JSON 或者編譯過的C/C++ 擴展。
Node.js 中存在 4 類模塊(原生模塊和3種文件模塊)
例:var http = require("http");
Node.js 中自帶了一個叫做 http 的模塊,我們在我們的代碼中請求它并把返回值賦給一個本地變量。
這把我們的本地變量變成了一個擁有所有 http 模塊所提供的公共方法的對象。
加載模塊:
從文件模塊緩存中加載
從原生模塊加載
從文件加載
http、fs、path、events、util等,原生模塊。
./mod或…/mod,相對路徑的文件模塊。
/pathtomodule/mod,絕對路徑的文件模塊。
mod,非原生模塊的文件模塊。
require方法接受以下幾種參數的傳遞:
exports
對象是模塊公開的接口
require
對象用于從外部獲取一個模塊的接口,即所獲取模塊的 exports 對象。
//例子
//hello.js
exports.world = function() { //相當于給function()函數取了個別名world()
console.log('Hello World');
}
//main.js
var hello = require('./hello');
hello.world(); //訪問 hello.js 的 world 函數
//結果
PS E:\learn> node main.js
Hello World
只是想把一個對象封裝到模塊中: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('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
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('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 是一個Node.js 核心模塊,提供常用函數的集合,用于彌補核心 JavaScript 的功能 過于精簡的不足。
util.callbackify(original)
將 async 異步函數(或者一個返回值為 Promise 的函數)轉換成遵循異常優先的回調風格的函數
參數:original 為 async 異步函數。
返回值:返回傳統回調函數(或者一個返回值為 Promise 的函數)
在返回的回調函數中,第一個參數為拒絕的原因(如果 Promise 解決,則為 null),第二個參數則是解決的值。
//例子
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,即要轉換的對象。
它至少接受一個參數 object,即要轉換的對象。
showHidden 是一個可選參數,如果值為 true,將會輸出更多隱藏信息。
depth 表示最大遞歸的層數,如果對象很復雜,你可以指定層數以控制輸出信息的多 少。如果不指定depth,默認會遞歸 2 層,指定為 null 表示將不限遞歸層數完整遍歷對象。
如果 colors 值為 true,輸出格式將會以 ANSI 顏色編碼,通常用于在終端顯示更漂亮 的效果。
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));
fs.open(path, flags[, mode], callback)
在異步模式下打開文件
參數:
r
以讀取模式打開文件。如果文件不存在拋出異常。r+
以讀寫模式打開文件。如果文件不存在拋出異常。rs
以同步的方式讀取文件。rs+
以同步的方式讀取和寫入文件。w
以寫入模式打開文件,如果文件不存在則創建。wx
類似 ‘w’,但是如果文件路徑存在,則文件寫入失敗。w+
以讀寫模式打開文件,如果文件不存在則創建。wx+
類似 ‘w+’, 但是如果文件路徑存在,則文件讀寫失敗。a
以追加模式打開文件,如果文件不存在則創建。ax
類似 ‘a’, 但是如果文件路徑存在,則文件追加失敗。a+
以讀取追加模式打開文件,如果文件不存在則創建。ax+
類似 ‘a+’, 但是如果文件路徑存在,則文件讀取追加失敗。
path - 文件的路徑。
flags - 文件打開的行為。具體值詳見下文。
mode - 設置文件模式(權限),文件創建默認權限為 0666(可讀,可寫)。
callback - 回調函數,帶有兩個參數如:callback(err, fd)
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)
創建目錄
參數:
recursive - 是否以遞歸的方式創建目錄,默認為 false。
mode - 設置目錄權限,默認為 0777。
path - 文件路徑
options 參數可以是
callback - 回調函數,沒有參數。
fs.readdir(path, callback)
讀取目錄
參數:
path - 文件路徑
callback - 回調函數,回調函數帶有兩個參數err, files,err 為錯誤信息,files 為 目錄下的文件數組列表
fs.rmdir(path, callback)
刪除目錄
參數:
path - 文件路徑
callback - 回調函數,沒有參數。
屬性: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模塊系統有哪些差數”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。