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.jsBonjour , 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éro | Méthode et description | ||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 |
| ||||||||||||||||||||
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 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 | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
1 | sortie
| ||||||||||
2 | beforeExit<🎜>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. | ||||||||||
3 | uncaughtException<🎜>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 :
状态码 | 名称 & 描述 |
---|---|
1 | Uncaught Fatal Exception 有未捕获异常,并且没有被域或 uncaughtException 处理函数处理。 |
2 | Unused 保留 |
3 | Internal JavaScript Parse Error JavaScript的源码启动 Node 进程时引起解析错误。非常罕见,仅会在开发 Node 时才会有。 |
4 | Internal JavaScript Evaluation Failure JavaScript 的源码启动 Node 进程,评估时返回函数失败。非常罕见,仅会在开发 Node 时才会有。 |
5 | Fatal Error V8 里致命的不可恢复的错误。通常会打印到 stderr ,内容为: FATAL ERROR |
6 | Non-function Internal Exception Handler 未捕获异常,内部异常处理函数不知为何设置为on-function,并且不能被调用。 |
7 | Internal Exception Handler Run-Time Failure 未捕获的异常, 并且异常处理函数处理时自己抛出了异常。例如,如果 process.on('uncaughtException') 或 domain.on('error') 抛出了异常。 |
8 | Unused 保留 |
9 | Invalid Argument 可能是给了未知的参数,或者给的参数没有值。 |
10 | Internal JavaScript Run-Time Failure JavaScript的源码启动 Node 进程时抛出错误,非常罕见,仅会在开发 Node 时才会有。 |
12 | Invalid Debug Argument 设置了参数--debug 和/或 --debug-brk,但是选择了错误端口。 |
>128 | Signal 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 :
序号. | 属性 & 描述 |
---|---|
1 | stdout 标准输出流。 |
2 | stderr 标准错误流。 |
3 | stdin 标准输入流。 |
4 | argv argv 属性返回一个数组,由命令行执行脚本时的各个参数组成。它的第一个成员总是node,第二个成员是脚本文件名,其余成员是脚本文件的参数。 |
5 | execPath 返回执行当前脚本的 Node 二进制文件的绝对路径。 |
6 | execArgv 返回一个数组,成员是命令行下执行脚本时,在Node可执行文件与脚本文件之间的命令行参数。 |
7 | env 返回一个对象,成员为当前 shell 的环境变量 |
8 | exitCode 进程退出时的代码,如果进程优通过 process.exit() 退出,不需要指定退出码。 |
9 | version Node 的版本,比如v0.10.18。 |
10 | versions 一个属性,包含了 node 的版本和依赖. |
11 | config 一个包含用来编译当前 node 执行文件的 javascript 配置选项的对象。它与运行 ./configure 脚本生成的 "config.gypi" 文件相同。 |
12 | pid 当前进程的进程号。 |
13 | title 进程名,默认值为"node",可以自定义该值。 |
14 | arch 当前 CPU 的架构:'arm'、'ia32' 或者 'x64'。 |
15 | platform 运行程序所在的平台系统 'darwin', 'freebsd', 'linux', 'sunos' 或 'win32' |
16 | mainModule 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érie | Méthode et description |
---|---|
1 | abandon() 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. |
2 | chdir(directory) Modifiez le répertoire du processus de travail actuel et lancez une exception si l'opération échoue. |
3 | cwd() 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é. |
5 | getgid() 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). |
6 | setgid(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). |
7 | getuid() 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). |
8 | setuid(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). |
9 | getgroups() 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). |
10 | setgroups(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). |
11 | initgroups(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). |
12 | kill(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 ». |
13 | memoryUsage() Renvoie un objet décrivant l'état de la mémoire utilisé par le processus Node, en octets. |
14 | nextTick(callback) Rappel à la fonction une fois la boucle d'événement en cours terminée. |
15 | umask([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. |
16 | uptime() Renvoie le nombre de secondes d'exécution du nœud. |
17 | hrtime() 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 }