Objets globaux Node.js


Il existe un objet spécial en JavaScript appelé objet global (Global Object), qui et toutes ses propriétés sont accessibles n'importe où dans le programme, c'est-à-dire des variables globales.

Dans le navigateur JavaScript, la fenêtre est généralement un objet global. L'objet global dans Node.js est global et toutes les variables globales (sauf global lui-même) sont globales propriétés de l'objet.

Dans Node.js, nous pouvons accéder directement aux propriétés globales sans les inclure dans l'application.


Objets globaux et variables globales

Le rôle le plus fondamental de global est de servir d'hôte de variables globales. Selon la définition d'ECMAScript, les conditions suivantes sont remplies Les variables du fichier sont des variables globales :

  • Variables définies dans la couche la plus externe

  • Propriétés de l'objet global

  • Variables définies implicitement (variables non définies avec affectation directe).

Lorsque vous définissez une variable globale, la variable deviendra également une propriété de l'objet global, et vice versa. Il faut noter Fait intéressant, dans Node.js, vous ne pouvez pas définir de variables au niveau le plus externe, car tout le code utilisateur appartient au module actuel. Le module lui-même n'est pas le contexte le plus externe.

Remarque : Utilisez toujours var pour définir des variables afin d'éviter d'introduire des variables globales, car les variables globales pollueront Les espaces de noms augmentent le risque de couplage de code.


__filename

__filename représente le nom de fichier du script en cours d'exécution. Il affichera le chemin absolu de l'emplacement du fichier et peut ne pas être le même que le nom de fichier spécifié par le paramètre de ligne de commande. S'il s'agit d'un module, la valeur renvoyée est le chemin d'accès au fichier du module.

Exemple

Créez le fichier main.js, le code est le suivant :

// 输出全局变量 __filename 的值
console.log( __filename );

Exécutez le fichier main.js, le code est le suivant :

$ node main.js
/web/com/php/nodejs/main.js

__dirname

__dirname représente le répertoire où se trouve le script en cours d'exécution.

Exemple

Créez le fichier main.js, le code est le suivant :

// 输出全局变量 __dirname 的值
console.log( __dirname );

Exécutez le fichier main.js, le code est le suivant :

$ node main.js
/web/com/php/nodejs

setTimeout(cb, ms)

setTimeout(cb, ms) La fonction globale exécute la fonction spécifiée (cb) après le nombre spécifié de millisecondes (ms). :setTimeout() n'exécute la fonction spécifiée qu'une seule fois.

Renvoie une valeur de handle représentant la minuterie.

Exemple

Créez le fichier main.js, le code est le suivant :

function printHello(){
   console.log( "Hello, World!");
}
// 两秒后执行以上函数
setTimeout(printHello, 2000);

Exécutez le fichier main.js, le code est le suivant :

$ node main.js
Hello, World!

clearTimeout(t)

clearTimeout( t ) La fonction globale est utilisée pour arrêter un timer préalablement créé via setTimeout(). Le paramètre t est la calculatrice créée par la fonction setTimeout().

Exemple

Créez le fichier main.js, le code est le suivant :

function printHello(){
   console.log( "Hello, World!");
}
// 两秒后执行以上函数
var t = setTimeout(printHello, 2000);

// 清除定时器
clearTimeout(t);

Exécutez le fichier main.js, le code est le suivant :

$ node main.js

setInterval(cb, ms)

setInterval(cb, ms) La fonction globale exécute la fonction spécifiée (cb) après le nombre spécifié de millisecondes (ms).

Renvoie une valeur de handle représentant la minuterie. Vous pouvez utiliser la fonction clearInterval(t) pour effacer la minuterie.

La méthode setInterval() continuera d'appeler la fonction jusqu'à ce que clearInterval() soit appelée ou que la fenêtre soit fermée.

Exemple

Créez le fichier main.js, le code est le suivant :

function printHello(){
   console.log( "Hello, World!");
}
// 两秒后执行以上函数
setInterval(printHello, 2000);

Exécutez le fichier main.js, le code est le suivant :

$ node main.js
Bonjour , Monde! Bonjour le monde! Bonjour le monde! Bonjour le monde! Bonjour le monde! ...

Le programme ci-dessus affichera "Hello, World!" et sera exécuté pour toujours jusqu'à ce que vous appuyiez sur le bouton ctrl + c.


console

console est utilisée pour fournir la sortie standard de la console. Il s'agit d'un outil de débogage fourni par le moteur JScript d'Internet Explorer, qui est ensuite progressivement devenu le standard de facto pour les navigateurs.

Node.js suit cette norme et fournit un objet console avec un comportement cohérent, qui est utilisé pour afficher des caractères vers le flux de sortie standard (stdout) ou le flux d'erreur standard (stderr).

Méthode console

Voici les méthodes de l'objet console :

Série numéroMéthode et description
1
序号方法 & 描述
1console.log([data][, ...])
向标准输出流打印字符并以换行符结束。该方法接收若干 个参数,如果只有一个参数,则输出这个参数的字符串形式。如果有多个参数,则 以类似于C 语言 printf() 命令的格式输出。
2console.info([data][, ...])
P该命令的作用是返回信息性消息,这个命令与console.log差别并不大,除了在chrome中只会输出文字外,其余的会显示一个蓝色的惊叹号。
3console.error([data][, ...])
输出错误消息的。控制台在出现错误时会显示是红色的叉子。
4console.warn([data][, ...])
输出警告消息。控制台出现有黄色的惊叹号。
5console.dir(obj[, options])
用来对一个对象进行检查(inspect),并以易于阅读和打印的格式显示。
6console.time(label)
输出时间,表示计时开始。
7console.timeEnd(label)
结束时间,表示计时结束。
8console.trace(message[, ...])
当前执行的代码在堆栈中的调用路径,这个测试函数运行很有帮助,只要给想测试的函数里面加入 console.trace 就行了。
9console.assert(value[, message][, ...])
用于判断某个表达式或变量是否为真,接手两个参数,第一个参数是表达式,第二个参数是字符串。只有当第一个参数为false,才会输出第二个参数,否则不会有任何结果。
console.log([data][, ...]) <🎜>< br/>Imprime les caractères dans le flux de sortie standard, terminés par un caractère de nouvelle ligne. Cette méthode reçoit plusieurs paramètres. S'il n'y a qu'un seul paramètre, la forme chaîne de ce paramètre est affichée. S'il y a plusieurs arguments, la sortie est dans un format similaire à la commande printf() du langage C.
2<🎜>console.info([data][, ...])<🎜>
P de cette commande La fonction consiste à renvoyer des messages d'information. Cette commande n'est pas très différente de console.log sauf que seul le texte sera affiché en chrome, le reste affichera un point d'exclamation bleu.
3<🎜>console.error([data][, ...])<🎜>
Message d'erreur de sortie . La console affichera une croix rouge lorsqu'une erreur se produit.
4<🎜>console.warn([data][, ...])<🎜>
Message d'avertissement de sortie. Un point d'exclamation jaune apparaît sur la console.
5<🎜>console.dir(obj[, options])<🎜>
Utilisé pour vérifier un objet ( inspecter) et l'affiche dans un format facile à lire et à imprimer.
6<🎜>console.time(label)<🎜>
Heure de sortie, indiquant le début du chronométrage.
7<🎜>console.timeEnd(label)<🎜>
Heure de fin, indiquant la fin du timing.
8<🎜>console.trace(message[, ...])<🎜>
Le code actuellement exécuté est sur la pile Le chemin d'appel dans la fonction de test est très utile. Ajoutez simplement console.trace à la fonction que vous souhaitez tester.
9<🎜>console.assert(value[, message][, ...])<🎜>
Utilisé pour Pour déterminer si une expression ou une variable est vraie, elle prend deux paramètres. Le premier paramètre est une expression et le deuxième paramètre est une chaîne. Le deuxième paramètre ne sera affiché que si le premier paramètre est faux, sinon il n'y aura aucun résultat.
console.log() : imprime les caractères dans le flux de sortie standard et se termine par un caractère de nouvelle ligne.


console.log en accepte plusieurs paramètres, s’il n’y a qu’un seul paramètre, la forme chaîne de ce paramètre est affichée. S'il y a plusieurs paramètres, alors Sortie dans un format similaire à la commande printf() du langage C.

Le premier paramètre est une chaîne, sinon paramètre, imprimez simplement une nouvelle ligne.

console.log('Hello world'); 
console.log('byvoid%diovyb'); 
console.log('byvoid%diovyb', 1991);

Le résultat en cours d'exécution est :

Hello world 
byvoid%diovyb 
byvoid1991iovyb
  • console.error() : l'utilisation est la même que console.log(), mais il est affiché au standard flux d’erreurs.

  • console.trace() : affiche la pile d'appels actuelle dans le flux d'erreurs standard.

console.trace();

Le résultat en cours d'exécution est :

Trace: 
at Object.<anonymous> (/home/byvoid/consoletrace.js:1:71) 
at Module._compile (module.js:441:26) 
at Object..js (module.js:459:10) 
at Module.load (module.js:348:31) 
at Function._load (module.js:308:12) 
at Array.0 (module.js:479:10) 
at EventEmitter._tickCallback (node.js:192:40)

Instance

Créez le fichier main.js, le code est le suivant :

console.info("程序开始执行:");

var counter = 10;
console.log("计数: %d", counter);

console.time("获取数据");
//
// 执行一些代码
// 
console.timeEnd('获取数据');

console.info("程序执行完毕。")

Exécutez le fichier main.js, le code est le suivant :

$ node main.js
程序开始执行:
计数: 10
获取数据: 0ms
程序执行完毕

process

process est une variable globale, qui est une propriété de l'objet global.

Il s'agit d'un objet utilisé pour décrire l'état actuel du processus Node.js, fournissant une interface simple avec le système d'exploitation. Habituellement, lorsque vous écrivez un programme local en ligne de commande, vous devez vous en occuper. Certaines des méthodes membres les plus couramment utilisées de l'objet processus seront présentées ci-dessous.

Numéro de sérieÉvénement et description
1sortie
序号事件 & 描述
1exit
当进程准备退出时触发。
2beforeExit
当 node 清空事件循环,并且没有其他安排时触发这个事件。通常来说,当没有进程安排时 node 退出,但是 'beforeExit' 的监听器可以异步调用,这样 node 就会继续执行。
3uncaughtException
当一个异常冒泡回到事件循环,触发这个事件。如果给异常添加了监视器,默认的操作(打印堆栈跟踪信息并退出)就不会发生。
4Signal 事件
当进程接收到信号时就触发。信号列表详见标准的 POSIX 信号名,如 SIGINT、SIGUSR1 等。
Déclenché lorsque le processus est prêt à quitter.
2beforeExit<🎜>Cet événement est déclenché lorsque le nœud efface la boucle d'événements et n'a aucun autre arrangement. Normalement, le nœud se termine lorsqu'aucun processus n'est planifié, mais l'écouteur « beforeExit » peut être appelé de manière asynchrone afin que le nœud continue son exécution.
3uncaughtException<🎜>Cet événement est déclenché lorsqu'une exception revient dans la boucle d'événements. Si un moniteur est ajouté à l’exception, l’action par défaut (imprimer la trace de la pile et quitter) ne se produira pas.
4Événement de signal <🎜>Déclenché lorsque le processus reçoit un signal. Pour la liste des signaux, consultez les noms de signaux POSIX standard, tels que SIGINT, SIGUSR1, etc.

Exemple

Créez le fichier main.js, le code est le suivant :

process.on('exit', function(code) {

  // 以下代码永远不会执行
  setTimeout(function() {
    console.log("该代码不会执行");
  }, 0);
  
  console.log('退出码为:', code);
});
console.log("程序执行结束");

Exécutez le fichier main.js, le code est le suivant :

$ node main.js
程序执行结束
退出码为: 0

Code d'état de sortie

Le code d'état de sortie est le suivant :

状态码名称 & 描述
1Uncaught Fatal Exception
有未捕获异常,并且没有被域或 uncaughtException 处理函数处理。
2Unused
保留
3Internal JavaScript Parse Error
JavaScript的源码启动 Node 进程时引起解析错误。非常罕见,仅会在开发 Node 时才会有。
4Internal JavaScript Evaluation Failure
JavaScript 的源码启动 Node 进程,评估时返回函数失败。非常罕见,仅会在开发 Node 时才会有。
5Fatal Error
V8 里致命的不可恢复的错误。通常会打印到 stderr ,内容为: FATAL ERROR
6Non-function Internal Exception Handler
未捕获异常,内部异常处理函数不知为何设置为on-function,并且不能被调用。
7Internal Exception Handler Run-Time Failure
未捕获的异常, 并且异常处理函数处理时自己抛出了异常。例如,如果 process.on('uncaughtException') 或 domain.on('error') 抛出了异常。
8Unused
保留
9Invalid Argument
可能是给了未知的参数,或者给的参数没有值。
10Internal JavaScript Run-Time Failure
JavaScript的源码启动 Node 进程时抛出错误,非常罕见,仅会在开发 Node 时才会有。
12Invalid Debug Argument
设置了参数--debug 和/或 --debug-brk,但是选择了错误端口。
>128Signal Exits
如果 Node 接收到致命信号,比如SIGKILL 或 SIGHUP,那么退出代码就是128 加信号代码。这是标准的 Unix 做法,退出信号代码放在高位。

Attributs du processus

Le processus fournit de nombreux attributs utiles pour nous permettre de mieux contrôler l'interaction du système :

序号.属性 & 描述
1stdout
标准输出流。
2stderr
标准错误流。
3stdin
标准输入流。
4argv
argv 属性返回一个数组,由命令行执行脚本时的各个参数组成。它的第一个成员总是node,第二个成员是脚本文件名,其余成员是脚本文件的参数。
5execPath
返回执行当前脚本的 Node 二进制文件的绝对路径。
6execArgv
返回一个数组,成员是命令行下执行脚本时,在Node可执行文件与脚本文件之间的命令行参数。
7env
返回一个对象,成员为当前 shell 的环境变量
8exitCode
进程退出时的代码,如果进程优通过 process.exit() 退出,不需要指定退出码。
9version
Node 的版本,比如v0.10.18。
10versions
一个属性,包含了 node 的版本和依赖.
11config
一个包含用来编译当前 node 执行文件的 javascript 配置选项的对象。它与运行 ./configure 脚本生成的 "config.gypi" 文件相同。
12pid
当前进程的进程号。
13title
进程名,默认值为"node",可以自定义该值。
14arch
当前 CPU 的架构:'arm'、'ia32' 或者 'x64'。
15platform
运行程序所在的平台系统 'darwin', 'freebsd', 'linux', 'sunos' 或 'win32'
16mainModule
require.main 的备选方法。不同点,如果主模块在运行时改变,require.main可能会继续返回老的模块。可以认为,这两者引用了同一个模块。

Exemple

Créez le fichier main.js, le code est le suivant :

// 输出到终端
process.stdout.write("Hello World!" + "\n");

// 通过参数读取
process.argv.forEach(function(val, index, array) {
   console.log(index + ': ' + val);
});

// 获取执行路局
console.log(process.execPath);


// 平台信息
console.log(process.platform);

Exécutez le fichier main.js, le code est le suivant :

$ node main.js
Hello World!
0: node
1: /web/www/node/main.js
/usr/local/node/0.10.36/bin/node
darwin

Manuel de référence des méthodes

Le processus fournit de nombreuses méthodes utiles pour nous permettre de mieux contrôler l'interaction du système :

Numéro de sérieMéthode et description
1abandon()
Cela amènera le nœud à déclencher l'événement d'abandon. Cela entraînera la fermeture du nœud et générera un fichier principal.
2chdir(directory)
Modifiez le répertoire du processus de travail actuel et lancez une exception si l'opération échoue.
3cwd()
Renvoie le répertoire de travail du processus en cours
4 exit([code])
Utilisez le code spécifié pour terminer le processus. En cas d'omission, le code 0 sera utilisé.
5getgid()
Obtenir l'ID de groupe du processus (voir getgid(2)). Obtenez l'identifiant numérique du groupe, pas le nom.
Remarque : cette fonction n'est disponible que sur les plates-formes POSIX (c'est-à-dire non Windows et Android).
6setgid(id)
Définissez l'ID de groupe du processus (voir setgid(2)). Peut recevoir un identifiant numérique ou un nom de groupe. Si un nom de groupe est spécifié, il bloquera l'attente de la résolution en un identifiant numérique.
Remarque : cette fonction n'est disponible que sur les plates-formes POSIX (c'est-à-dire non Windows et Android).
7getuid()
Obtenir l'ID utilisateur du processus (voir getuid(2)). Il s'agit d'un identifiant numérique et non d'un nom d'utilisateur.
Remarque : cette fonction n'est disponible que sur les plates-formes POSIX (c'est-à-dire non Windows et Android).
8setuid(id)
Définissez l'ID utilisateur du processus (voir setuid(2)). Reçoit un identifiant numérique ou un nom de chaîne. Si un nom de groupe est spécifié, il bloquera l'attente d'être analysé en un identifiant numérique.
Remarque : cette fonction n'est disponible que sur les plates-formes POSIX (c'est-à-dire non Windows et Android).
9getgroups()
Renvoie le tableau d'identifiant de groupe du processus. Il n'y a aucune garantie que le système POSIX l'aura, mais node.js le garantit.
Remarque : cette fonction n'est disponible que sur les plates-formes POSIX (c'est-à-dire non Windows et Android).
10setgroups(groups)
Définissez l'ID de groupe du processus. Il s'agit d'une opération autorisée, vous devez donc disposer des privilèges root ou de la capacité CAP_SETGID.
Remarque : cette fonction n'est disponible que sur les plates-formes POSIX (c'est-à-dire non Windows et Android).
11initgroups(user, extra_group)
Lisez /etc/group et initialisez la liste d'accès au groupe, en utilisant les membres All groupes dans lesquels vous appartenez. Il s'agit d'une opération autorisée, vous devez donc disposer des privilèges root ou de la capacité CAP_SETGID.
Remarque : cette fonction n'est disponible que sur les plates-formes POSIX (c'est-à-dire non Windows et Android).
12kill(pid[, signal])
Envoie un signal au processus pid est l'identifiant du processus, et. le signal est envoyé Une description sous forme de chaîne du signal. Le nom du signal est une chaîne, telle que « SIGINT » ou « SIGHUP ». S'il est omis, le signal sera « SIGTERM ».
13memoryUsage()
Renvoie un objet décrivant l'état de la mémoire utilisé par le processus Node, en octets.
14nextTick(callback)
Rappel à la fonction une fois la boucle d'événement en cours terminée.
15umask([mask])
Définir ou lire le masque du fichier de processus. Le processus enfant hérite du masque du processus parent. Si le paramètre masque est valide, l'ancien masque est renvoyé. Sinon, renvoie le masque actuel.
16uptime()
Renvoie le nombre de secondes d'exécution du nœud.
17hrtime()
Renvoie le temps haute résolution du processus en cours sous la forme de [secondes, nanosecondes] tableau. C'est un événement arbitraire par rapport au passé. Cette valeur est indépendante de la date et n'est donc pas affectée par la dérive de l'horloge. L'objectif principal est de mesurer les performances du programme à des intervalles de temps précis.
Vous pouvez transmettre le résultat précédent au process.hrtime() actuel, qui renverra la différence de temps entre les deux, qui peut être utilisée pour comparer et mesurer l'intervalle de temps.

Instance

Créez le fichier main.js, le code est le suivant :

// 输出当前目录
console.log('当前目录: ' + process.cwd());

// 输出当前版本
console.log('当前版本: ' + process.version);

// 输出内存使用情况
console.log(process.memoryUsage());

Exécutez le fichier main.js, le le code est le suivant :

$ node main.js
当前目录: /web/com/php/nodejs
当前版本: v0.10.36
{ rss: 12541952, heapTotal: 4083456, heapUsed: 2157056 }