この記事では、nodejs のモジュールとメソッドについて詳しく説明します。必要な方は参考にしていただければ幸いです。
1. モジュール読み込み仕様
ES6 よりも前には js モジュール読み込みソリューションがあり、最も重要なものは CommonJS と AMD 仕様です。 commonjs は主に、nodejs などの同期読み込みを実現するためにサーバーで使用されます。 AMD 仕様は、requirejs などの非同期読み込み用のブラウザーに適用されます。 seaJS などの同期読み込みソリューション用の CMD 仕様もあります。
Nodejs にはシンプルなモジュール読み込みシステムがあります。 Nodejs では、ファイルとモジュールは 1 対 1 に対応します (各ファイルは独立したモジュールとみなされます)。
require が参照できる唯一のオブジェクトは module.exports です。exports オブジェクトは参照できません。また、モジュールを作成するときに使用するエクスポート オブジェクトは、実際には module.exports への参照にすぎません。
2、module.exportsとexports
Nodejsのすべてのモジュールは、モジュールオブジェクトを自動的に作成します。同時に、モジュールオブジェクトの下に、特定のクラスのインスタンスを割り当てることができます。このクラスのエクスポート インスタンスにエクスポートします。
モジュールが実行される前に、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('./a')(); // a模块是一个函数,立即执行a模块函数 var data = require('./a').data; // a模块导出的是一个对象 var a = require('./a')[0]; // a模块导出的是一个数组
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 - 在接收和写入过程中发生错误时触发。
終了 -すべてのデータが基盤となるシステムに書き込まれたときにトリガーされます。
1. 読み取り可能なストリームを作成します
var ReaderStream = fs.createReadStream('input.txt');
2. 書き込み可能なストリームを作成し、ファイルoutput.txtに書き込みます
var WriterStream = fs .createW riteStream( 'output.txt');
3. パイプ読み取りおよび書き込み操作、input.txt ファイルの内容を読み取り、その内容を output.txt ファイルに書き込みます
ReaderStream.pipe(writerStream);
4 、圧縮input.txt ファイルを input.txt.gz、チェーン ストリーム
fs.createreadstream ('input.txt')。PIPE (zlib.creategzip ()));
5. input.txt.gz を解凍します。 input.txt
input.txt'));
9. Node.js グローバル オブジェクト
JavaScript にはグローバル オブジェクト (Global Object) と呼ばれる特別なオブジェクトがあり、このオブジェクトとそのすべてのプロパティは次のようになります。プログラム内の任意の場所、つまりグローバル変数にアクセスできます。
1. __filename __filename は、現在実行されているスクリプトのファイル名を表します。ファイルの場所の絶対パスが出力されますが、コマンド ライン パラメーターで指定したファイル名と同じでない場合があります。 モジュール内の場合、戻り値はモジュール ファイルへのパスです。
2. __dirname __dirname は、現在実行されているスクリプトが配置されているディレクトリを表します。
3. setTimeout(cb, ms) setTimeout(cb, ms) グローバル関数は、指定されたミリ秒数 (ms) 後に指定された関数 (cb) を実行します。 :setTimeout() は、指定された関数を 1 回だけ実行します。タイマーを表すハンドル値を返します。
4. clearTimeout(t) clearTimeout(t) グローバル関数は、setTimeout() によって以前に作成されたタイマーを停止するために使用されます。 パラメータ t は、setTimeout() 関数によって作成されたタイマーです。
5. setInterval(cb, ms) setInterval(cb, ms) グローバル関数は、指定されたミリ秒 (ms) 数後に指定された関数 (cb) を実行します。
タイマーを表すハンドル値を返します。タイマーは、clearInterval(t) 関数を使用してクリアできます。 setInterval() メソッドは、clearInterval() が呼び出されるかウィンドウが閉じられるまで、関数を呼び出し続けます。
6. コンソール console は、コンソールの標準出力を提供するために使用されます。これは、Internet Explorer の JScript エンジンによって提供されるデバッグ ツールであり、その後徐々にブラウザーの実装標準になりました。
7. プロセス process はグローバル変数、つまりグローバル オブジェクトのプロパティです。これは、現在の Node.js プロセスのステータスを記述するために使用されるオブジェクトであり、オペレーティング システムとのシンプルなインターフェイスを提供します。重要な属性には、標準入力ストリームと標準出力ストリーム stdin および stdout が含まれます
関連する推奨事項:
以上がNodejs のモジュールとメソッドの詳細な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。