Cet article parlera du système de modules dans Node.js, y compris le module d'événements, le module util, le module fs, le module OS, le module Path, etc. J'espère qu'il vous sera utile !
Référence : Système de modules Node.js
Afin de permettre aux fichiers Node.js de s'appeler, Node.js fournit un système de modules simple.
Les modules sont les composants de base des applications Node.js, et les fichiers et modules ont une correspondance biunivoque.
En d'autres termes, un fichier Node.js est un module, qui peut être du code JavaScript, JSON ou une extension C/C++ compilée.
Il existe 4 types de modules (modules natifs et 3 types de modules fichiers) dans Node.js
Exemple : var http = require("http");
var http = require("http");
Node.js 中自带了一个叫做 http 的模块,我们在我们的代码中请求它并把返回值赋给一个本地变量。
这把我们的本地变量变成了一个拥有所有 http 模块所提供的公共方法的对象。【相关教程推荐:nodejs视频教程】
加载模块:
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() {...}
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
参考资料: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)
exports
est l'interface exposée par le module🎜//例子 //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的值
module.exports = function() {...}
🎜 Le seul changement dans l'interface du module est d'utiliser le module .exports = Bonjour remplace exports.world = function(){}. Lorsque le module est référencé en externe, son objet d'interface est l'objet Hello lui-même à sortir, et non les exportations d'origine. 🎜🎜🎜🎜🎜Utilisation des exportations et module.exports🎜🎜 Si vous souhaitez exposer des propriétés ou des méthodes au monde extérieur, utilisez simplement les exportations. Si vous souhaitez exposer des objets (similaires aux classes, comprenant de nombreuses propriétés et méthodes), utilisez. module.exports. 🎜🎜//结果 $ node event.js listener1 arg1 参数 arg2 参数 listener2 arg1 参数 arg2 参数
events
est un module, utilisez require("events");
pour accéder au module. 🎜EventEmitter
est équivalent à la seule classe du module events
Cette classe a plusieurs attributs addListener(event, listeningr)
Ajoute un écouteur pour l'événement spécifié à la fin du tableau d'écouteurs. 🎜on(event, listeningr)
La fonction on enregistre un écouteur pour l'événement spécifié et accepte un événement de chaîne et une fonction de rappel. 🎜once(event, listening)
Enregistrez un écouteur unique pour l'événement spécifié, c'est-à-dire que l'écouteur ne sera déclenché qu'une seule fois au maximum et l'écouteur sera libéré immédiatement après le déclenchement 🎜 removeListener(event, listening)
Supprime un écouteur pour l'événement spécifié. L'écouteur doit être un écouteur enregistré pour l'événement. Il accepte deux paramètres, le premier est le nom de l'événement, le second est le nom de la fonction de rappel🎜removeAllListeners([event])
supprime tous les écouteurs pour tous les événements, si l'événement est spécifié, supprime tous les écouteurs pour l'événement spécifié. 🎜setMaxListeners(n)
Par défaut, EventEmitters affichera un message d'avertissement si vous ajoutez plus de 10 auditeurs. La fonction setMaxListeners est utilisée pour modifier le nombre limite par défaut d'écouteurs. 🎜listeners(event)
Renvoie le tableau d'écoute pour l'événement spécifié. 🎜emit(event, [arg1], [arg2], [...])
Exécute chaque écouteur dans l'ordre de l'écouteur Si l'événement a un écouteur enregistré, il renvoie vrai. , sinon renvoie false. 🎜listenerCount(emitter, event)
Renvoie le nombre d'auditeurs pour l'événement spécifié. 🎜🎜🎜🎜//例子 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
//例子 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 是一个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)
Lire le fichier en mode asynchrone Cette méthode utilise le descripteur de fichier pour lire le fichier. 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()
offset - Le décalage d'écriture pour les écritures dans le tampon. length - Nombre d'octets à lire dans le fichier.
fs.ftruncate(fd, len, callback)
Intercepter des fichiers en mode asynchrone. Cette méthode utilise des descripteurs de fichiers pour lire les fichiers. len - La durée de l'interception du contenu du fichier. callback - fonction de rappel, aucun paramètre.
🎜🎜🎜🎜fs.unlink(path, callback)
Format de syntaxe pour supprimer des fichiers : 🎜🎜🎜Paramètres : 🎜🎜path - chemin du fichier. 🎜🎜callback - fonction de rappel, aucun paramètre. 🎜🎜🎜🎜🎜fs.mkdir(path[, options], callback)
Créer un répertoire 🎜🎜🎜Paramètres : 🎜🎜path - chemin du fichier 🎜🎜les paramètres d'options peuvent être 🎜🎜récursifs - s'ils doivent être récursifs Créez un répertoire de la manière suivante, la valeur par défaut est false. 🎜🎜mode - Définissez les autorisations du répertoire, la valeur par défaut est 0777. 🎜🎜🎜🎜callback - fonction de rappel, aucun paramètre. 🎜🎜🎜🎜🎜fs.readdir(path, callback)
Lire le répertoire 🎜🎜🎜Paramètres : 🎜🎜path - chemin du fichier 🎜🎜callback - fonction de rappel, la fonction de rappel prend deux paramètres err, fichiers , err est le message d'erreur, les fichiers sont une liste de tableaux de fichiers dans le répertoire 🎜🎜🎜🎜🎜fs.rmdir(path, callback)
Supprimer le répertoire 🎜🎜🎜Paramètres : 🎜🎜path - file path 🎜🎜 callback - fonction de rappel, pas de paramètres. 🎜🎜🎜🎜🎜 🎜🎜os module 🎜🎜🎜Reference: nodule node.js 🎜 os.EOL
Constante qui définit le caractère de fin de ligne du système d'exploitation. os.tmpdir()
Renvoie le dossier temporaire par défaut du système d'exploitationos.endianness()
Renvoie le CPU Séquence de sections de mots, éventuellement « BE » ou « LE ». os.hostname()
Renvoie le nom d'hôte du système d'exploitation. os.type()
Renvoie le nom du système d'exploitationos.platform()
Renvoie le nom du système d'exploitation compilé os.arch()
Renvoie l'architecture CPU du système d'exploitation, les valeurs possibles sont "x64", "arm" et "ia32". os.release()
Renvoie la version du système d'exploitation. os.uptime()
Renvoie la durée d'exécution du système d'exploitation, en secondes. os.loadavg()
Renvoie un tableau contenant des moyennes de charge sur 1, 5 et 15 minutes. os.totalmem()
Renvoie la quantité totale de mémoire système en octets. os.freemem()
Renvoie la quantité de mémoire libre dans le système d'exploitation, en octets. os.cpus()
Renvoie un tableau d'objets contenant des informations sur chaque CPU/cœur installé : modèle, vitesse (unité MHz), heure (l'un contient user, nice, sys , ralenti et irq objets de CPU/cœur millisecondes utilisés). os.networkInterfaces()
Obtenez la liste des interfaces réseau. 🎜🎜🎜🎜🎜Module Path 🎜🎜🎜🎜Module Node.js Path 🎜🎜🎜🎜🎜🎜Module Net 🎜🎜🎜🎜Module Node.js Net 🎜🎜🎜🎜🎜 🎜Module DNS🎜🎜🎜🎜Module DNS Node.js 🎜🎜🎜🎜🎜🎜Module de domaine🎜🎜🎜🎜Module de domaine Node.js🎜🎜Références : Module Web Node, js
Environnement ES6 construction
Pour plus de connaissances sur les nœuds, veuillez visiter : Tutoriel Nodejs !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!