這篇文章帶給大家的內容是關於nodejs中模組以及方法的詳細介紹,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。
1,模組載入規格
ES6之前已經出現了js模組載入的方案,最主要的是CommonJS和AMD規格。 commonjs主要應用於伺服器,實作同步加載,如nodejs。 AMD規範應用於瀏覽器,如requirejs,為非同步載入。同時還有CMD規範,為同步載入方案如seaJS。
Nodejs 有一個簡單的模組載入系統。在 Nodejs 中,檔案和模組是一一對應的(每個檔案被視為一個獨立的模組)。
require方能看到的只有module.exports這個對象,它是看不到exports對象的,而我們在編寫模組時用到的exports對象實際上只是對module.exports的引用。
2,module.exports和exports
Nodejs 中的每一個模組都會自動建立一個module 對象,同時module 物件下有一個叫exports 的屬性,可以將某個類別的實例賦值給module.exports,從而導出這個類別的實例。
在模組執行前,Nodejs 會將 module.exports 的值賦於全域變數 exports ,以便 module.exports.f = ... 可以更簡潔的寫成 exports.f = ... 。注意:就像所有變數一樣,如果重新賦予exports 賦值,它就不再綁定到module.exports 了,也不會匯出指定模組
import $ from 'jquery'; import * as _ from '_'; import {a,b,c} from './a'; import {default as alias, a as a_a, b, c} from './a';require的使用非常簡單,它相當於module.exports的傳送門,module.exports後面的內容是什麼,require的結果就是什麼,物件、數字、字串、函數…再把require的結果賦值給某個變量,相當於把require和module.exports進行平行空間的位置重疊。使用時,完全可以忽略模組化這個概念來使用require,僅僅把它當做一個node內建的全域函數,它的參數甚至可以是表達式
require('./a')(); // a模块是一个函数,立即执行a模块函数 var data = require('./a').data; // a模块导出的是一个对象 var a = require('./a')[0]; // a模块导出的是一个数组5,node非同步程式設計I/0和事件循環 Node.js 非同步程式設計的直接體現就是回呼。回調函數在完成任務後就會被調用,Node 使用了大量的回調函數,Node 所有 API 都支援回調函數。 我們可以一邊讀取文件,一邊執行其他指令,在檔案讀取完成後,我們將檔案內容傳回作為回呼函數的參數。這樣在執行程式碼時就沒有阻塞或等待檔案 I/O 操作。這大大提高了 Node.js 的效能,可以處理大量的並發請求。
Node.js 是单进程单线程应用程序,但是通过事件和回调支持并发,所以性能非常高。Node.js 的每一个 API 都是异步的,并作为一个独立线程运行,使用异步函数调用,并处理并发。
Node.js 基本上所有的事件机制都是用设计模式中观察者模式实现。Node.js 单线程类似进入一个while(true)的事件循环,直到没有事件观察者退出,每个异步事件都生成一个事件观察者,如果有事件发生就调用该回调函数.
6,nodejs事件系统 Node.js EventEmitter
Node.js 所有的异步 I/O 操作在完成时都会发送一个事件到事件队列。EventEmitter 对象如果在实例化时发生错误,会触发 error 事件。当添加新的监听器时,newListener 事件会触发,当监听器被移除时,removeListener 事件被触发。
// 引入 events 模块 var events = require('events'); // 创建 eventEmitter 对象 var eventEmitter = new events.EventEmitter();
方法:
1,addListener(event, listener) 为指定事件添加一个监听器到监听器数组的尾部。
2,on(event, listener) 为指定事件注册一个监听器,接受一个字符串 event 和一个回调函数。
3,removeListener(event, listener) 移除指定事件的某个监听器,监听器必须是该事件已经注册过的监听器。它接受两个参数,第一个是事件名称,第二个是回调函数名称。
4,removeAllListeners([event]) 移除所有事件的所有监听器, 如果指定事件,则移除指定事件的所有监听器
5, listeners(event) 返回指定事件的监听器数组。
6,emit(event, [arg1], [arg2], [...]) 按参数的顺序执行每个监听器,如果事件有注册监听返回 true,否则返回 false。
7,nodejs文件系统
异步和同步:Node.js 文件系统(fs 模块)模块中的方法均有异步和同步版本,例如读取文件内容的函数有异步的 fs.readFile() 和同步的 fs.readFileSync()。异步的方法函数最后一个参数为回调函数,回调函数的第一个参数包含了错误信息(error)。
方法:
1、打开文件 fs.open(path, flags[, mode], callback)
2、获取文件信息 fs.stat(path, callback)
3、写入文件 fs.writeFile(file, data[, options], callback)
4、读取文件 fs.read(fd, buffer, offset, length, position, callback)
参数使用说明如下:
fd - 通过 fs.open() 方法返回的文件描述符。
buffer - 数据写入的缓冲区。
offset - 缓冲区写入的写入偏移量。
length - 要从文件中读取的字节数。
position - 文件读取的起始位置,如果 position 的值为 null,则会从当前文件指针的位置读取。
callback - 回调函数,有三个参数err, bytesRead, buffer,err 为错误信息, bytesRead 表示读取的字节数,buffer 为缓冲区对象。
5、关闭文件 fs.close(fd, callback)
6、截取文件 fs.ftruncate(fd, len, callback)
7、删除文件 fs.unlink(path, callback)
8、创建目录 fs.mkdir(path[, mode], callback)
9、读取目录 fs.readdir(path, callback)
10、删除目录 fs.rmdir(path, callback)
8、Node.js Stream(流)
Stream 是一个抽象接口,Node 中有很多对象实现了这个接口。例如,对http 服务器发起请求的request 对象就是一个 Stream,还有stdout(标准输出)。
所有的 Stream 对象都是 EventEmitter 的实例。常用的事件有:
data - 当有数据可读时触发。
end - 没有更多的数据可读时触发。
error - 在接收和写入过程中发生错误时触发。
finish - 所有資料已寫入到底層系統時觸發。
1、建立可讀流
var readerStream = fs.createReadStream('input.txt');
2、建立一個可以寫入的流,寫入到檔案output.txt 中
var writerStream = fs.createWriteStream('output.txt');
#3、管道讀取和寫入操作,讀取input.txt 檔案內容,並將內容寫入到output.txt 文件中
readerStream.pipe(writerStream);
4、壓縮input.txt 文件為input.txt.gz,鍊式流
fs.createReadStream('input.txt').pipe(zlib.createGzip()).pipe(fs.createWriteStream('input.txt.gz'));
5、解壓縮input.txt.gz檔案為input.txt
fs.createReadStream('input.txt.gz').pipe(zlib.createGunzip()).pipe(fs.createWriteStream('input.txt'));#fs.
9、Node.js 全域物件 JavaScript 中有一個特殊的對象,稱為全域物件(Global Object),它及其所有屬性都可以在程式的任何地方訪問,即全域變數。 1、__filename __filename 表示目前正在執行的腳本的檔案名稱。它將輸出檔案所在位置的絕對路徑,且和命令列參數所指定的檔案名稱不一定相同。如果在模組中,傳回的值是模組檔案的路徑。 2、__dirname __dirname 表示目前執行腳本所在的目錄。 3、setTimeout(cb, ms) setTimeout(cb, ms) 全域函數在指定的毫秒(ms)數後執行指定函數(cb)。 :setTimeout() 只執行一次指定函數。傳回一個代表定時器的句柄值。 4、clearTimeout(t) clearTimeout( t ) 全域函數用來停止一個先前透過 setTimeout() 建立的計時器。參數 t 是透過 setTimeout() 函數建立的定時器。 5、setInterval(cb, ms) setInterval(cb, ms) 全域函數在指定的毫秒(ms)數後執行指定函數(cb)。 傳回一個代表定時器的句柄值。可以使用 clearInterval(t) 函數來清除定時器。 setInterval() 方法會不停地呼叫函數,直到 clearInterval() 被呼叫或視窗關閉。 6、console console 用來提供控制台標準輸出,它是由 Internet Explorer 的 JScript 引擎提供的偵錯工具,後來逐漸成為瀏覽器的實作標準。 7、process process 是一個全域變量,即 global 物件的屬性。它用於描述當前Node.js 進程狀態的對象,提供了一個與作業系統的簡單介面。重要屬性包括標準輸入輸出流stdin和stdout 相關推薦:以上是nodejs中模組以及方法的詳細介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!