Глобальні змінні 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 o global variables in Node. Цей матеріал буде отримувати і керувати в часі з усіма необхідними для пізнання глобальних variables.

What are Global Variables?

Global variables are very similar, if not identical, to regular variables. Global variables може бути initialized with a value, що value can be changed, and they can even be cleared out like a regular variable. Відмінність між регулярними варіаціями і глобальними варіативами походить до їхньої межі. Якщо ви створили variable в JavaScript файлі, що variables тільки exists в scope that it was declared in. Now what do I mean by this? У коді нижче, ви можете повідомити про те, як дві різні варіації з різними рядами.

// 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!"; ) // Це буде результат в error error because the variable does no exist // функція. localScope = "Try and change me here";

У code snippet above, we can see that there are two variables, fileScope and localScope . Variable fileScope може бути змінена або названа з будь-якого місця в цьому файлі, деє місцевогоскопіювання variable тільки exists inside the function doSomething() . I'm sure at this point you are wondering what this has to do with global variables.

У цьому випадку можна використовувати JavaScript programs share global namespace between all of files in the program. Для того, щоб вийти з іншого способу, маю на увазі, що ваш програма є основним файлом або контентом, що "imported" всі інші JavaScript файли. Ви знайдете варіацію в цьому великому контенті файлі, що варіаційно зараз має скопіювати через весь program. Якщо ви не думаєте, що namespace є або ви хочете виконати більше, ніж вони, виконати цей матеріал до з'явиться більше.

How to Declare and Use a Global Variable

У той час, як ми будемо вивчати те, що глобальна variable in Node is, let's talk about how we actually set up and use a global variable. Global object is what given us the scope of the entire project, rather than just the file (module) the variable була створена в. Зміна величини GlobalString , і потім буде завершено.

// 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 // Ми можемо використовувати Global. console.log(globalString); // Output: undefined globalString = “Ви can change it too!"; console.log(globalString); // Output: "We can change it too!"

What I не може розмовляти про все, що є інший спосіб, що ви можете зробити variable global. The reason I have excluded this is because it is not a property way of setting up a variable. Якщо ви визначили параметр в файлі без використання кнопки var і встановіть значення для неї, глобальний об'єкт буде налаштовуватися для цієї variable. Цей процес є важливим кроками його в глобально accessible variable. Я стрімко ставлюся до використання цього методу тому, що це не ведеться до створення глобалів. Це також важливо, щоб помітити, що якщо ви встановлюєте "використовувати" directive, Node буде неприпустимий implicit globals і ви будете добряче кінець з помилкою в ході того часу, коли працює script.

Practical Use Cases for Global Variables

Now, you might be thinking to yourself that you want to go off і створити глобальні variables now that you know more about them. I am going to strongly caution against creating Global variables for a few very important reasons.

Першою причиною є те, що ви створили загальну зміну, вона існує через життєвий термін application. Якщо варіаційні особистих через життєвий термін app it means that it is there, in memory, occupying resources while the app is running.

Second, traditionally using global variables може спричинити конкуренцію issues. Якщо багато повідомлень може використовувати те ж саме variable, або немає ніяких access modifiers або неспроможні звільнення в місці, це може бути певною важливим питанням двох треків, щоб встановити доступ і використовувати саму variable. However, У той час, коли це є в інших мовах, це не є необхідною умовою для Node.js, як це є стрімко в одному-загальне середовищі. While it isможна до cluster Node processes, є не природним чином до комунікації між ними.

Останній 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. Коли написання коду, ми будемо робити, що це є modular і reusable як можливо, при тому, що робить її, це є зручним для використання і 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.

Якщо ви думаєте більше про те, що globals не recommended, ви можете сконтактувати з цим великим числом названі Global Variables Are Bad .

Якщо ви занепокоєні як на основі глобальних змін, ні. Ви будете йти на випадок на кілька головних варіацій, що є будовою в Node and try to get better understanding of why they are global and how they are used. У fact, ви маєте можливість, використовуючи кілька подібних зроблених без будь-яких результатів, що вони є глобальними предметами!

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

Якщо ви приймете на цей код блоку, ви будете намагатися бачити на кожній instance ви будете використовуватися, console.log() . Залежно від коду документації, значок об'єкта є global, що має кілька методів, які дозволяють розробникам, щоб зробити це так, як printing log або error. Digging deeper in docs we can see that console is really a global instance that is configured to write to process.stdout and process.stderr .

Це brings us to next statement that you see in the code block above, the process object. Якщо ви збираєтеся виконати продукцію, побудоване на application nude, то ви маєте добрий шлях до налаштування порту для виробничого середовища. Веб-еквівалент variable env є частиною процесу об'єкта, який є іншим global. Ви можете налаштувати параметри на процес об'єкта в будь-якому файлі в вашому проекті, тому що це global. Якщо цей об'єкт не був загальним, значок об'єкта не буде accessible з будь-якого файлу, remember it є реально об'єктом, що refers back to the process object.

​ setInterval is another function that you may have seen before if you ever ha reason to delay an operation before executing it. setTimeout і setImmediate є подібні в натурі до setInterval і є основними функціями як добре. Ці три функції є частиною таймера module, які exposes в Global API, за допомогою яких функціонують ці функції без потребує timer в ваших файлах explicitly.

'All of above mentioned use cases are built in to Node and are global for a reason. Процес об'єкта є глобальним, тому що він дає інформацію про поточний хід Node process і thefore should be available from any file without having to require it. Теж може бути функція таймера module, який містить рядок функцій, які є важливими і повинні бути accessible anywhere without having to require it. Якщо ви збираєтеся йти більше, ніж існують глобальні предмети, побудовані в Node, я буду вивчати офіційний документ на Globals .

Learn More

Want to learn more about the fundamentals of Node.js? Особисто, I'd recommend on-line course, як Wes Bos' Learn Node.js для відеозаписів є найкращий спосіб до follow and you'll в даний час get to build a real-world application.

Conclusion

​I know that was quite a bit of information, so thank you for sticking it out. Всі ці дані були прописані в документації на Node's website . Please feel free to ask questions and dive 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
Існує неперехоплений виняток, і він не був оброблений або домен обробника необмеженийвиключенням.
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 , 2 32Array: ( BYTES_PER_ELEMENT: 4 ), Float32Array: ( BYTES_PER_ELEMENT: 4 ), Float64Array: ( BYTES_PER_ELEMENT: 8 ), DataView: , Global: , процеси: ( EventEmitter: , title: "node", assert: , version: "v0.6.5", _ 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" _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/ServiceProcessS TMPDIR: "/var/folders/2h/2hQmtmXlFT4yVGtr5DBpdl9LAiQ/-Tmp-/", Apple_PubSub_Socket_Render: "/tmp/launch-9Ga0PT/Render", USER: "ddopson"," -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: , realExit: , chdir: , debug: , error: , cwd: , watchFile: : , 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: , uptime: , memoryUsage: , uvCounters: , binding: ), GLOBAL: , root: , Buffer: ( poolSize: 8192, isBuffer: , byteLength: , _charsWritten: 8 ), setTimeout: , set console: , window: , navigator: () ) */

** Примітка: щодо налаштування "GLOBAL._", загалом, ви повинні просто зробити var _ = require("underscore"); . Так, ви робите це у кожному файлі, який використовує підкреслення, так само, як у Java ви робите import com.foo.bar; . Це спрощує визначення того, що робить ваш код, тому що посилання між файлами є явними. М'яко дратує, але добре. Це проповідь.

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