Глобальные переменные node js. Nodejs основы. Метод Справочное руководство

NODE.JS – программное средство для выполнения js.

Nodejs = V8 + I/O + библиотеки

V8: быстро, современно, экономно

Преимущества

  • Javascript
  • Общий код на клиенте и на сервере
  • Основные задачи по web
  • Много соединений и задач одновременно
  • Легко создать рабочий прототип
  • Удобный менеджер пакетов npm
  • Сообщество

Установка

при установке nodejs прописывает себя в переменную PATH (+ npm), [администрирование – переменные среды]; можно проверить в командной строке:
set PATH

Как правило под nodejs запускают файлы: напишем простой скрипт и запустим его посредством командной строки:


Скрипт будет выполнен и результат отобразится в командной строке.

Документация по nodejs

Модули nodejs

Чтобы разобраться как работают встроенные модули nodejs необходимо скачать архив с исходниками с сайта nodejs (source code). И зайти в директорию lib . (команда dir - получаем список файлов через командную строку; Если вам необходимо перечислить файлы во всех вложенных папках, то вместо " dir " используйте " dir /s "). Если вы поставили nodejs из пакета, то в папке lib файлов не обнаружите.

В nodejs есть модули с разной степенью стабильности . (например, 0 – не стоит использовать; 1 , 2 – использовать можно но API модуля может измениться).

Функции растут (проект развивается) и со временем нам потребуется вынести функцию-конструктор USER в отдельный файл. Вот тут-то в дело вступают модули.

Модули этого своего рода способ, который предлагает nodejs для организации проекта.

Проекты как правило разрастаются, что приводит к желанию разбить проект на несколько файлов – вот тут-то в дело вступают модули.

require

Для html-страниц для подключения скриптов используют тег script . В nodejs существует специальная команда require .

Var user = require("./user");

В нашем примере мы обращаемся к файлу (user.js) в той же директории (расширение (.js) писать необязательно).

//require("./user"); // .js указывать необязательно // в этом случае файл будет выполнен, но переменной USER // не будет // в этом главное отличие от тегов script от nodejs // В node.js функции и переменные каждого модуля являются глобальными // для данного файла (самого модуля) и они не становятся автоматически // доступными при подключении (require("./user")) // Но как же получить доступ? // В каждом модуле есть специальная переменная exports - это объект и то // что я туда положу вернется как результат require var user = require("./user.js"); // результат: user = { User: function }

Первое отличие модульной системы nodejs от браузерных скриптов: если в браузере есть два тега script , то функция, которая определена на глобальном уровне одном из них доступна и в другом, а в nodejs нет. В nodejs функции и переменные являются глобальными для данного файла (они не становятся доступными при подключении посредством require). Таким образом nodejs позволяет писать действительно независимые модули. Но чтобы модуль был доступен используется система экспортов . В каждом модуле есть специальная переменная exports .

Модуль-директория DIR/index

Подключаем непосредственно папку var user = require("./user"); , в которой лежит соответствующий index.js .

Например

Function User(name){ this.name = name; } User.prototype.hello = function(who){ console.log(phrases.Hello + ", " + who.name); }; exports.User = User;

Подключаем и используем конструктор User в файле./server.js

//server.js var user = require("./user"); var vasya = new user.User("Вася");

« ./ » - относительно текущей папки

exports – это объект и то, что туда положено, вернется как результат require (exports.jpg). Таким образом модуль может объявить свои приватные переменные/функции и экспортировать лишь то, что необходимо.


Для глобальных переменных и т.д. существует объект global

Global.User = User;

Итог

  • Подключение require
  • Переменные: var (приватные у модулей), exports , global (используется редко)
  • Виды модулей: js , node (с расширением.node), json (с расширением.json) . Модули json используются в том случае, когда требуется хранить какую-либо простую информацию на файле.
  • Модуль-директория DIR/index

Объект module

  • Объект module
  • Модуль-функция module.exports = function
  • Кеширование модулей (заново модуль никогда не читается)
  • Расположение модулей: порядок поиска
  • Передаем параметры: модуль-фабрика

Объект module (основополагающий объект для модулей) является переменной, которая существует в каждом модуле (файле, можно вывести console.log(module);). . Содержимое: свойство id – как правило путь к файлу,
parent – ссылка на родительский модуль (module.parent - ссылка на родительский модуль, который require данный),
children (module.children - те модули, которые подключены посредством require),
свойство exports и другие.

Модуль или приложение? module.parent

Модуль может быть запущен напрямую, а если нет, если функционал подключен к другому модулю, то пусть он этот функционал экспортирует. Разделить эти два случая можно при помощи проверки:

If(module.parent) { exports.run = run; } else { run(); }


пс: как говорится на stackoverflow.com Родетелем является модуль, который вызвал скрипт для интерпретации

// $ node foo.js console.log(module.parent); // null // require("./foo") console.log(module.parent); // { ... }

Правильное использование module.exports

В контексте модуля:

module.exports = exports = this (данные конструкции равнозначны)

Если вы хотите передать функцию не в объекте, а напрямую, то используйте следующий синтаксис:

Module.exports = User;


Кеширование модулей

Когда Nodejs загружает модуль он полностью создает соответствующий объект module (с учетом parent , exports и других аналогичных свойств) и запоминает его у себя (module.id (полный путь к файлу) служит идентификатором для внутреннего кэша) и в следующий раз, когда мы повторно обращаемся (подключаем) к какому-либо модулю (файлу), nodejs берет все тот же объект из кэша. То есть, например, инициализировать модуль достаточно 1 раз в каком-либо файле, в дальнейшем его можно просто использовать.

В нашем случае для var db = require("../db");
и для var db = require("./db"); берется один и тот же объект. Поэтому принцип следующий: в первый раз, когда используется модуль, он инициализируется и в дальнейшем мы его только подключаем и пользуемся им (то есть в нашем случае нам не нужно использовать db.connect() дважды, то есть в разных файлах).


Расположение модулей: порядок поиска модулей в nodejs

Как сделать так, чтобы db подключалась всегда без указания специфичного пути:

Var db = require("../db"); //или var db = require("./db");

а вот так:

Var db = require("db");

в независимости от того в каком файле подключается db .

Для этого нужно понимать порядок поиска модулей в nodejs (то что происходит, когда вызывается require). В nodejs существует множество встроенных модулей, например, require("fs"); , который будет подключен без проблем. Если же в require указать конкретный путь, например, require("../db"); , то поиск будет вестись исходя из заданного пути и файл будет найден, либо nodejs попытается получить этот файл как директорию (и будет искать index.js внутри категории).

Если же указать require("db"); и при этом модуль не является встроенным, то будет произведен поиск директории node_modules относительно текущего положения (если найдет, то попытается взять модуль из нее). Если директория node_modules отсутствует, то директория node_modules будет искаться выше и т.д.

Помимо указания конкретного пути для модуля, nodejs может искать модули следующим образом:

Введение в npm – менеджер пакетов для Node.JS

  1. создать файл с описанием пакета (package.json), который содержит информацию о модуле (имя, версия и т.д.). Либо вручную, либо через команду
    npm init
    (запросит нужную информацию)
  2. Чтобы опубликовать модуль необходимо:
    1. Добавить юзера посредством команды npm adduser (необходимо ввесть Username и Password). Теперь вся работа с npm будет от имени этого пользователя. Юзер может залогинится на https://www.npmjs.com/~name_user и наблюдать за своими модулями.
    2. Публикация: npm publish
  3. Далее кто-либо может использовать Ваш, добавленный в базу, модуль, а сам пользователь вносить изменения.
  4. Получаем все команды npm при помощи команды npm help
  5. Поиск нужно модуля в базе данных: npm s ключевые_слова или npm search ключевые_слова (например, npm s super module)
  6. Устанавливаем модуль: npm install name_module или npm i name_module
  7. При установке модулей nodejs сначала ищет папку node_modules в текущей директории (потом выше и выше и т.д), либо (если node_modules отсутствует) ищет package.json (также поднимаясь вверх; package.json , как правило, обозначает корень проекта) и, соответственно, если находит package.json, то делает в соответствующей директории папку node_modules ; если же оба варианта не проходят, то nodejs делает папку node_modules в текущей директории. Если вы хотите поставить модуль в определенную директорию, то в этой директории необходимо создать папку node_modules .
  8. npm up обновить модуль (проверит модули на обновление, которые есть в папке node_modules)
  9. npm remove имя_модуля (удалить модуль)

Вывод по npm:

npm init
nmp adduser
npm publish
npm search ключевые слова
npm install модуль
npm update модуль
npm remove модуль
npm help команда

Структура пакета NPM

Установка нужной версии, например: npm i [email protected]

Последнюю версию модуля можно получить в том случае, если модуль разрабатывается, используя систему версинирования git, например, на github. Достаточно получить Git Read-Only (url): https://github.com/strongloop/express.git и в консоли:

npm i https://github.com/strongloop/express.git

dependencies в package.json

dependencies указывает на те модули, от которых зависит данный.

devDependencies

Модули прописанные в devDependencies не ставятся, если модуль подтягивается как зависимость. Они ставятся лишь для разработки и их можно установить, если, например, зайти в модуль в папке node_modules и прописать npm i (или при установке флага npm config).

поле main задает точку входа в пакет

Глобальные модули

Любой модуль можно поставить глобально, если поставить флаг -g: npm -g модуль

Глобально означает в системную директорию.

Директория глобальных модулей под windows:

C:\users\User_Name\AppData\Roaming\npm

Глобальные модули ставятся в стандартную системную директорию. Те бинарники, которые есть в package.json будут поставлены по системному пути (это и есть основное применение глобальных модулей), то есть в дальнейшем их можно будет вызвать через консоль.

По материалам курсов И. Кантора

​Hey guys, in today"s article I want to talk about global variables in Node. This article is aimed at developers who are at a beginner to intermediate skill level working with Node. If you have never heard of global variables or worked with them, no need to worry. This article will get you up and running in no time with everything you need to know about global variables.

What are Global Variables?

Global variables are very similar, if not identical, to regular variables. Global variables can be initialized with a value, that value can be changed, and they can even be cleared out like a regular variable. The difference between a regular variable and a global variable comes down to their scope. When you create a variable in a JavaScript file, that variables only exists in the scope that it was declared in. Now what do I mean by this? In the code below, you can see an example of two different variables with different scopes.

// Scope.js let fileScope = "Can be accessed anywhere in the file"; function doSomething() { let localScope = "Can only be accessed inside this function"; fileScope = "Can be accessed in the function too!"; } // This will result in an error because the variable does not exist // outside the function. localScope = "Try and change me here";

In the code snippet above, we can see that there are two variables, fileScope and localScope . The variable fileScope can be changed or called from anywhere within this file, whereas the localScope variable only exists inside the function doSomething() . I"m sure at this point you are wondering what this has to do with global variables. When we talk about global variables, they exist for all of the files in a program meaning they have global scope for the program.

The reason this is possible is because JavaScript programs share a global namespace between all of the files in the program. To put it another way, imagine that your program is a giant file or container that has "imported" all the other JavaScript files. You then declare a variable in this large container file, that variable now has scope throughout the whole program. If you are not sure what a namespace is or you want to find out more about them, check out this article to learn more.

How to Declare and Use a Global Variable

Now that we have a better understanding of what a global variable in Node is, let"s talk about how we actually set up and use a global variable. To set up a global variable, we need to create it on the global object. The global object is what gives us the scope of the entire project, rather than just the file (module) the variable was created in. In the code block below, we create a global variable called globalString and we give it a value. Next, we change the value of globalString , and then finally we set it to undefined.

// Global.js global.globalString = "This can be accessed anywhere!"; console.log(globalString); // Output: "This can be accessed anywhere!" globalString = "Check me out now"; console.log(globalString); // Output: "Check me out now" globalString = undefined; console.log(globalString); // Output: undefined // Example.js // We can use the global we created in Global.js in this file // as well. console.log(globalString); // Output: undefined globalString = “We can change it too!"; console.log(globalString); // Output: "We can change it too!"

What I have not talked about yet is another way that you can make a variable global. The reason I have excluded this is because it is not a proper way of setting up a variable. If you declare a variable in a file without using the keyword var and then assign a value to it, the global object will set a property for this variable. This process essentially turns it into a globally accessible variable. I strongly advise against using this method though as it is not the proper way to go about creating globals. It is also important to note that if you set the "use strict" directive, Node will disable implicit globals and you will likely end up with an error at runtime rather than a working script.

Practical Use Cases for Global Variables

Now, you might be thinking to yourself that you want to go off and create global variables now that you know more about them. I am going to strongly caution against creating global variables for a few very important reasons.

The first reason is that when you create a global variable, it exists throughout the lifetime of the application. When a variable persists through the lifetime of the app it means that it is there, in memory, occupying resources while the app is running.

Second, traditionally using global variables can cause concurrency issues. If multiple threads can access the same variable and there are no access modifiers or failsafes in place, it can lead to some serious issues of two threads attempting to access and use the same variable. However , while this is the case in other languages, it is not necessarily the case for Node.js as it is strictly a single-threaded environment. While it is possible to cluster Node processes, there is no native way to communicate between them.

The last reason I am going to talk about is that using globals can cause implicit coupling between files or variables. Coupling is not a good thing when it comes to writing great code. When writing code, we want to make sure that it is as modular and reusable as possible, while also making sure it is easy to use and understand. Coupling pieces of your code together can lead to some major headaches down the road when you are trying to debug why something isn"t working.

If you want to know more about why globals are not recommended, you can check out this great article called Global Variables Are Bad .

If you feel confused as to the purpose of global variables, fear not. We are going to take a look at a few of the global variables that are built into Node and try to get a better understanding of why they are global and how they are used. In fact, you have probably used a few of them already without even realizing that they are global objects!

// Node Globals console.log("Hello World!"); process.env.PORT = 3000; setInterval({ console.log("2 seconds passed."); }, 2000);

If you take a look at the above code block you will probably see at least one instance you have used before, console.log() . According the the Node documentation, the console object is a global that has a few methods allowing developers to do things such as printing a log or an error. Digging deeper into the docs we can see that console is really a global instance that is configured to write to process.stdout and process.stderr .

This brings us to the next statement that you see in the code block above, the process object. If you have put up a production build of a Node application, then you have likely had to set the port for the environment variable. The environment variable env is a part of the process object which is another global. You can access variables on the process object in any file in your project because it is global. If this object was not global, the console object would not be accessible from any file either, remember it is really an object that refers back to the process object.

​ setInterval is another function that you may have seen before if you ever had reason to delay an operation before executing it. setTimeout and setImmediate are similar in nature to setInterval and are both global functions as well. These three functions are a part of the timer module which exposes a global API allowing you to call these functions without requiring timer in your files explicitly.

​All of the above mentioned use cases are built in to Node and are global for a reason. The process object is global because it provides information about the current running Node process and therefore should be available from any file without having to require it. The same can be said of the timer module which contains a number of functions that are important and should be accessible anywhere without having to require it. If you would like to learn more about the existing global objects built into Node, I encourage you to visit the official documentation on Globals .

Learn More

Want to learn more about the fundamentals of Node.js? Personally, I"d recommend an online course, like Wes Bos" Learn Node.js since the videos are much easier to follow and you"ll actually get to build a real-world application.

Conclusion

​I know that was quite a bit of information, so thank you for sticking it out. All of the above information was found in the documentation on Node"s website . Please feel free to ask questions and give comments in the comment section below. Until next time guys!

JavaScript имеет специальный объект, называемый глобальный объект (Global Object), его и все его атрибуты могут быть доступны в любом месте программы, глобальной переменной.

Браузер JavaScript обычно является глобальным объектом окна, глобальный объект Node.js является глобальным, все глобальные переменные (за исключением глобальной себя) являются собственностью глобального объекта.

В Node.js нам прямой доступ к глобальным свойствам, без необходимости включать его в заявку.

Глобальные объекты и глобальные переменные

Наиболее фундаментальная глобальная роль как глобальной переменной хоста. По определению ECMAScript отвечают следующие условия являются глобальными переменными:

  • Определена переменная Наружная;
  • Свойства глобального объекта;
  • Переменная неявно определяется (прямое назначение неопределенные переменные).

При определении глобальной переменной, переменная также станет собственностью глобального объекта, и наоборот. Обратите внимание, что, в Node.js вы не можете определить переменные во внешнем, так как все коды пользователей являются частью текущего модуля, а сам модуль не внешний контекст.

Примечание: всегда используйте вар для определения переменных для того, чтобы избежать введения глобальной переменной, поскольку глобальные переменные будут загрязнять пространство имен, увеличивают риск кода связи.

__filename

__filename указывает имя файла сценария в настоящее время выполняется. Абсолютный путь к месту, где он будет выходной файл, а параметр командной строки и укажите имя файла не обязательно то же самое. Если в модуле, возвращенное значение является путь к файлу модуля.

примеров

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

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

__dirname

__dirname представляет собой в настоящее время осуществляет каталог сценариев находится.

примеров

Создайте файл main.js, код следующим образом:

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

Исполнительный файл main.js, код выглядит следующим образом:

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

setTimeout (Си-Би, мс)

setTimeout (Си - Би, мс) : Функция SetTimeout () указывается только один раз.

Она возвращает значение дескриптора представляет таймер.

примеров

Создайте файл main.js, код следующим образом:

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

Исполнительный файл main.js, код выглядит следующим образом:

$ node main.js Hello, World!

clearTimeout (т)

clearTimeout (т) используется для остановки глобальной функции перед передачей setTimeout () , чтобы создать таймер. ПараметрT функцией setTimeout () , чтобы создать калькулятор.

примеров

Создайте файл main.js, код следующим образом:

Function printHello(){ console.log("Hello, World!"); } // 两秒后执行以上函数 var t = setTimeout(printHello, 2000); // 清除定时器 clearTimeout(t);

Исполнительный файл main.js, код выглядит следующим образом:

$ node main.js

setInterval (Си-Би, мс)

setInterval (Си - Би, мс) глобальная функция выполняет указанную функцию после определенного числа миллисекунд (мс) Номер (CB).

Она возвращает значение дескриптора представляет таймер. Вы можете использовать функциюclearInterval (T) , чтобы очистить таймер.

Метод setInterval () будет продолжать вызывать функцию до clearInterval () вызывается или окно закрыто.

примеров

Создайте файл main.js, код следующим образом:

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

Исполнительный файл main.js, код выглядит следующим образом:

$ node main.js Hello, World! Hello, World! Hello, World! Hello, World! Hello, World! ......

Вышеприведенная программа будет выводить один раз каждые две секунды "Hello, World!", И будет постоянно выполнение продолжается, пока не будет нажата кнопкаCTRL + C.

консоль

Консоль Консоль для обеспечения стандартного вывода, который является средства отладки, предоставляемые двигателем JScript в Internet Explorer, а позже стал стандартом де-факто браузер.

Node.js следует этому стандарту, обеспечивает согласованное поведение и привычки объекта консоли, используемой в стандартный поток вывода (STDOUT) или стандартный поток ошибок (STDERR) выходных символов.

метод консоли

Ниже приведен объект консоли:

Нет. Метод и описание
1 console.log ([данные] [, ... ])
Для стандартных печатных символов выходного потока и заканчиваются символом новой строки. Этот метод принимает несколько параметров, если имеется только один параметр, то выход строка этого параметра. Если есть несколько аргументов, такие места, как формат вывода команды на языке С Е ().
2 console.info ([данные] [, ... ])
P роль команды возвращает информационное сообщение, команда console.log разница не большая, в дополнение к хрому будет выводиться только текст, остальное покажет синий восклицательный знак.
3 console.error ([данные] [, ... ])
Выходное сообщение об ошибке. Консоль будет отображаться красным цветом при возникновении ошибки вилку.
4 console.warn ([данные] [, ... ])
Предупреждающее сообщение выводится. Консоль отображается с желтым восклицательным знаком.
5 console.dir (OBJ [, опции])
Объект, используемый для проверки (осмотр), и легко читаемый дисплей и печать форматов.
6 console.time (ярлык)
Выходной сигнал времени, время начала.
7 console.timeEnd (ярлык)
Время окончания, что указывает на окончание времени.
8 console.trace (сообщение [, ...])
Код в настоящее время осуществляет путь вызова в стеке, запустить этот тест функция полезна, просто хочу, чтобы проверить функцию которой присоединился console.trace на линии.
9 console.assert (значение [, сообщение] [ , ...])
Для определения того, является ли истинная переменная или выражение, потребовалось два параметра, первый параметр является выражением, а второй аргумент является строкой. Только тогда, когда первый аргумент является ложным, то выход будет второй аргумент, он не будет иметь никаких результатов.
console.log (): печать на стандартный поток вывода и заканчиваться символом новой строки.

console.log принимает несколько параметров, если имеется только один параметр, выходной строки этого параметра. Если есть несколько аргументов, такие места, как формат вывода команды на языке С Е ().

Первый параметр является строкой, без параметров, только напечатать символ новой строки.

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

Hello world byvoid%diovyb byvoid1991iovyb

  • console.error (): с console.log () использует то же самое, но вывод в стандартный поток ошибок.
  • console.trace (): поток ошибок в стандартный вывод текущего стека вызовов.
console.trace();

Операционные результаты следующим образом:

Trace: at Object. (/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)

примеров

Создайте файл main.js, код следующим образом:

Console.info("程序开始执行:"); var counter = 10; console.log("计数: %d", counter); console.time("获取数据"); // // 执行一些代码 // console.timeEnd("获取数据"); console.info("程序执行完毕。")

Исполнительный файл main.js, код выглядит следующим образом:

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

процесс

Процесс представляет собой глобальную переменную, атрибут глобальный объект.

Он используется для описания текущего состояния процесса Node.js объекта, он обеспечивает простой интерфейс операционной системы. Обычно вы пишете собственные программы командной строки, и в конечном счете, иметь дело с ним. Ниже будет ввести некоторые из наиболее часто используемых метода процесса возражают члены.

Нет. События и описание
1 выход
Срабатывает, когда процесс готов бросить.
2 beforeExit
Это событие инициируется, когда узел пустой цикл событий, и никакие другие меры. В общем случае, когда не существует процесса для организации выходного узла, но слушатели "beforeExit" можно назвать асинхронно, так что узел будет продолжаться.
3 uncaughtException
Когда исключение кипящий обратно в цикл обработки событий, вызвать это событие. Если вы добавляете монитор к исключению, действие по умолчанию (печать стека и выход) не будет происходить.
4 Сигнал срабатывает, когда
событие , когда процесс получает сигнал.
Просмотрите список стандартных сигналов имен POSIX сигналов, таких как SIGINT, SIGUSR1 и так далее.

примеров

Создайте файл main.js, код следующим образом:

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

Исполнительный файл main.js, код выглядит следующим образом:

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

Коды состояния выхода

Коды состояния выхода заключаются в следующем:

Код состояния Название и описание
1 Uncaught Fatal Exception
Там неперехваченное исключение, и он не был обработан или домен обработчика uncaughtException.
2 неиспользуемый
удержание
3 Внутренняя ошибка JavaScript Анализировать
JavaScript исходный код разбора ошибки вызывается при запуске процесса Node. Очень редко, только тогда, когда будет в развитии Node.
4 Внутренняя неисправность JavaScript Оценка
JavaScript процесс запуска исходного узла, при оценке функции возвращает сбой. Очень редко, только тогда, когда будет в развитии Node.
5 Фатальная ошибка
V8 в неисправимой ошибки со смертельным исходом. Обычно печать Stderr, содержание: фатальная ошибка
6 Non-Функция внутреннего Исключение Хэндлер
Uncaught исключение, обработчик исключений внутри каким-то образом установить на функции, а также нельзя назвать.
7 Внутренняя Исключение обработчика Run-Time Сбой
Uncaught исключение, а обработчик исключений для обработки своих собственных бросает исключение. Например, если process.on ("uncaughtException") или domain.on ("ошибка") вызывает исключение.
8 неиспользуемый
удержание
9 Недопустимый аргумент
Это может быть неизвестно параметров или параметра до значения.
10 Сбой внутреннего JavaScript Run-Time
JavaScript исходный код генерируется при запуске ошибок в процессе узлов, очень редко, только тогда, когда будет в развитии Node.
12 Invalid Debug Аргументом
--debug набора параметров и / или --debug-BRK, но выбрал не тот порт.
> 128 Выходы сигналов
Если узел получает фатальный сигнал, например, SIGKILL или SIGHUP, то код возврата равен 128 плюс код сигнала. Это стандартная практика Unix, высокий код на выходных сигналов.

атрибуты процесса

Процесс предоставляет множество полезных свойств, легкость взаимодействия, что мы можем лучше контролировать систему:

Кол-во. Свойство & Описание
1 STDOUT
Стандартный выходной поток.
2 STDERR
Стандартный поток ошибок.
3 STDIN
Стандартный входной поток.
4 ARGV
ARGV свойство возвращает массив различных параметров на выполнение сценария командной строки, когда композиция. Его первые члены всегда узел, второй элемент это имя файла сценария, а остальные члены параметры файла сценария.
5 execPath
Возвращает абсолютный путь текущего узла двоичных файлов выполнения скрипта.
6 execArgv
Возвращает член массива находится под командной строки скрипт выполняется между узлом исполняемым параметрами командной строки файл сценария.
7 ENV
Возвращает объект, члены текущей переменной окружения оболочки
8 ExitCode
Код выхода для процесса, если процесс подарена process.exit () выхода, без указания кода выхода.
9 версия
версия узла, такие v0.10.18.
10 версии
Свойство, которое содержит версии узлов и зависимостей.
11 конфиг
Объект, который содержит текущий узел используется для компиляции исполняемого файла конфигурации яваскрипта опций. Это тот же запустить./configure скрипт, созданный файл "config.gypi".
12 ПИД - регулятора
Номер текущего процесса.
13 название
Имя процесса, по умолчанию "узел", вы можете настроить значение.
14 арка
Текущая архитектура CPU: "рука", "ia32" или "64".
15 платформа
Запустите программу, где платформа "Darwin", "FreeBSD", "Linux", "SunOS" или "win32"
16 mainModule
require.main альтернативные методы. Различные точки, если основной модуль изменяется во время выполнения, require.main может продолжать возвращаться к старому модулю. Считается, что оба относятся к одному модулю.

примеров

Создайте файл main.js, код следующим образом:

// 输出到终端 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);

Исполнительный файл main.js, код выглядит следующим образом:

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

Метод Справочное руководство

Процесс предоставляет много полезных методов для облегчения более эффективного контроля нашей интерактивной системы:

Нет. Метод и описание
1 прервать ()
Это вызовет событие триггера узла прерывания. Это приведет к выходу узла и создать файл дампа.
2 ChDir (каталог)
Изменение текущего рабочего каталога процесса, если операция не может бросить.
3 УХО ()
Возвращает рабочую директорию текущего процесса
4 выход ([код])
Окончание процесса с указанным кодом. Если этот параметр опущен, он будет использовать код 0.
5 getgid ()
Получить идентификацию группы процессов (см getgid (2)). Когда группа была приобретена цифровой идентификатор, а не имя.
6 setgid (ID)
Настройка процесса идентификации группы (см setgid (2)). ID может принимать цифровое или групповое имя. Если вы указываете имя группы будет разрешено блокировать ждет цифрового идентификатора.
Примечание: Эта функция может быть использована (например, не-Windows и Android) только на POSIX платформах.
7 getuid ()
Получить процесс идентификации пользователя (см getuid (2)). Это числовой идентификатор пользователя, а не имя пользователя.
Примечание: Эта функция может быть использована (например, не-Windows и Android) только на POSIX платформах.
8 УИП (ID)
Идентификатор пользователя настройки процесса (см УИП (2)). Получение цифрового идентификатора или строки имени. Если вы указываете имя группы будет разрешено блокировать ждет цифрового идентификатора.
Примечание: Эта функция может быть использована (например, не-Windows и Android) только на POSIX платформах.
9 getgroups ()
Процесс возвращения ИН группы массив. Система POSIX не гарантирует, что есть, но есть Node.js гарантировано.
Примечание: Эта функция может быть использована (например, не-Windows и Android) только на POSIX платформах.
10 setgroups (группы)
Установить идентификатор группы процесса. Он имеет право работать, все, что вам нужно иметь привилегии суперпользователя, или имеют потенциал CAP_SETGID.
Примечание: Эта функция может быть использована (например, не-Windows и Android) только на POSIX платформах.
11 initgroups (пользователь, extra_group)
Чтение / и т.д. / группу, и инициализирует список доступа к группе, все члены группы расположены. Он имеет право работать, все, что вам нужно иметь привилегии суперпользователя, или имеют потенциал CAP_SETGID.
Примечание: Эта функция может быть использована (например, не-Windows и Android) только на POSIX платформах.
12 убить (ИДП [сигнал])
Посылает сигнал процессу. ИЗОДРОМНЫЙ идентификатор процесса, а сигнал является строка, обозначающая сигнал, передаваемый. Имена сигналов это строки вроде "SIGINT" или "" SIGHUP. Если этот параметр опущен, то сигнал будет "SIGTERM".
13 MemoryUsage ()
Он возвращает объект, который описывает процесс, используемый байты состояния узла памяти.
14 nextTick (обратный вызов)
После окончания текущего цикла обработки событий обратного вызова функции.
15 Umask ([маска])
Установить или читать процесс маску файла. Дочерние процессы наследуют эту маску из родительского процесса. Если маска аргумент верен, то она возвращает старую маску. В противном случае, она возвращает текущую маску.
16 Провел ()
Возвращает количество секунд Node уже запущен.
17 hrtime ()
Временное разрешение текущего процесса, в виде [секунд] наносекунд массива. Это относительно любого прошедшего события. Это значение не имеет ничего общего с датой, поэтому не влияет на дрейф часов. Основная цель через точный промежуток времени, чтобы измерить производительность программы.
Перед тем, как можно передать результат к текущему process.hrtime (), он вернется к разнице во времени между ними, для опорного и измерения временного интервала.

примеров

Создайте файл main.js, код следующим образом:

// 输出当前目录 console.log("当前目录: " + process.cwd()); // 输出当前版本 console.log("当前版本: " + process.version); // 输出内存使用情况 console.log(process.memoryUsage());

В узле, вы можете установить глобальные переменные с помощью "глобальной" или "GLOBAL" объекта:

GLOBAL._ = require("underscore"); // but you "shouldn"t" do this! (see note below)

или полезнее...

GLOBAL.window = GLOBAL; // like in the browser

С узла, вы можете видеть, что они сшиты друг с другом:

Node-v0.6.6/src/node.js: 28: global = this; 128: global.GLOBAL = global;

В приведенном выше коде «это» является глобальным контекстом. С помощью модуля commonJS (какой узел использует), этот «объект» внутри модуля (т. Е. «Ваш код») НЕ является глобальным контекстом. Для доказательства этого, см. Ниже, где я извергаю «этот» объект, а затем гигантский объект «GLOBAL».

Console.log("\nTHIS:"); console.log(this); console.log("\nGLOBAL:"); console.log(global); /* outputs ... THIS: {} GLOBAL: { ArrayBuffer: , Int8Array: { BYTES_PER_ELEMENT: 1 }, Uint8Array: { BYTES_PER_ELEMENT: 1 }, Int16Array: { BYTES_PER_ELEMENT: 2 }, Uint16Array: { BYTES_PER_ELEMENT: 2 }, Int32Array: { BYTES_PER_ELEMENT: 4 }, Uint32Array: { BYTES_PER_ELEMENT: 4 }, Float32Array: { BYTES_PER_ELEMENT: 4 }, Float64Array: { BYTES_PER_ELEMENT: 8 }, DataView: , global: , process: { EventEmitter: , title: "node", assert: , version: "v0.6.5", _tickCallback: , moduleLoadList: [ "Binding evals", "Binding natives", "NativeModule events", "NativeModule buffer", "Binding buffer", "NativeModule assert", "NativeModule util", "NativeModule path", "NativeModule module", "NativeModule fs", "Binding fs", "Binding constants", "NativeModule stream", "NativeModule console", "Binding tty_wrap", "NativeModule tty", "NativeModule net", "NativeModule timers", "Binding timer_wrap", "NativeModule _linklist" ], versions: { node: "0.6.5", v8: "3.6.6.11", ares: "1.7.5-DEV", uv: "0.6", openssl: "0.9.8n" }, nextTick: , stdout: , arch: "x64", stderr: , platform: "darwin", argv: [ "node", "/workspace/zd/zgap/darwin-js/index.js" ], stdin: , env: { TERM_PROGRAM: "iTerm.app", "COM_GOOGLE_CHROME_FRAMEWORK_SERVICE_PROCESS/USERS/DDOPSON/LIBRARY/APPLICATION_SUPPORT/GOOGLE/CHROME_SOCKET": "/tmp/launch-nNl1vo/ServiceProcessSocket", TERM: "xterm", SHELL: "/bin/bash", TMPDIR: "/var/folders/2h/2hQmtmXlFT4yVGtr5DBpdl9LAiQ/-Tmp-/", Apple_PubSub_Socket_Render: "/tmp/launch-9Ga0PT/Render", USER: "ddopson", COMMAND_MODE: "unix2003", SSH_AUTH_SOCK: "/tmp/launch-sD905b/Listeners", __CF_USER_TEXT_ENCODING: "0x12D732E7:0:0", PATH: "/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:~/bin:/usr/X11/bin", PWD: "/workspace/zd/zgap/darwin-js", LANG: "en_US.UTF-8", ITERM_PROFILE: "Default", SHLVL: "1", COLORFGBG: "7;0", HOME: "/Users/ddopson", ITERM_SESSION_ID: "w0t0p0", LOGNAME: "ddopson", DISPLAY: "/tmp/launch-l9RQXI/org.x:0", OLDPWD: "/workspace/zd/zgap/darwin-js/external", _: "./index.js" }, openStdin: , exit: , pid: 10321, features: { debug: false, uv: true, ipv6: true, tls_npn: false, tls_sni: true, tls: true }, kill: , execPath: "/usr/local/bin/node", addListener: , _needTickCallback: , on: , removeListener: , reallyExit: , chdir: , debug: , error: , cwd: , watchFile: , umask: , getuid: , unwatchFile: , mixin: , setuid: , setgid: , createChildProcess: , getgid: , inherits: , _kill: , _byteLength: , mainModule: { id: ".", exports: {}, parent: null, filename: "/workspace/zd/zgap/darwin-js/index.js", loaded: false, exited: false, children: , paths: }, _debugProcess: , dlopen: , uptime: , memoryUsage: , uvCounters: , binding: }, GLOBAL: , root: , Buffer: { poolSize: 8192, isBuffer: , byteLength: , _charsWritten: 8 }, setTimeout: , setInterval: , clearTimeout: , clearInterval: , console: , window: , navigator: {} } */

** Примечание: относительно настройки "GLOBAL._", в общем, вы должны просто сделать var _ = require("underscore"); . Да, вы делаете это в каждом файле, который использует подчеркивание, так же, как в Java вы делаете import com.foo.bar; . Это упрощает определение того, что делает ваш код, потому что ссылки между файлами являются «явными». Мягко раздражает, но хорошо. Это проповедь.

Существует исключение из каждого правила. У меня был точно точно один экземпляр, где мне нужно было установить «GLOBAL._». Я создавал систему для определения файлов «config», которые были в основном JSON, но были «написаны в JS», чтобы немного повысить гибкость. В таких конфигурационных файлах не было инструкций «require», но я хотел, чтобы они имели доступ к подчеркиванию (система ENTIRE была основана на шаблонах подчеркивания и подчеркивания), поэтому перед оценкой «config» я бы установил «GLOBAL._». Так что да, для каждого правила есть где-то исключение. Но у вас есть хорошая причина, а не просто «я устал от ввода», поэтому я хочу нарушить соглашение ».