Variabilele globale ale nodului js. Bazele Nodejs. Ghid de referință al metodei

NODE.JS– un instrument software pentru executarea js.

Nodejs = V8 + I/O + biblioteci

V8: rapid, modern, economic

Avantaje

  • Javascript
  • Cod comun pe client și server
  • Sarcini web de bază
  • Multe conexiuni și sarcini în același timp
  • Ușor de creat un prototip funcțional
  • Manager de pachete npm convenabil
  • Comunitate

Instalare

La instalare, nodejs se scrie în variabila PATH (+ npm), [administrare - variabile de mediu]; poate fi verificat pe linia de comandă:
setați PATH

De regulă, fișierele sunt lansate sub nodejs: să scriem un script simplu și să-l rulăm prin linia de comandă:


Scriptul va fi executat și rezultatul va fi afișat pe linia de comandă.

Documentația Nodejs

modulele nodejs

Pentru a înțelege cum funcționează modulele nodejs încorporate, trebuie să descărcați arhiva codului sursă de pe site-ul web nodejs (codul sursă). Și accesați directorul lib. (comanda dir - obțineți o listă de fișiere prin linia de comandă; Dacă trebuie să enumerați fișierele în toate subfolderele, atunci în loc de „dir” folosiți „dir /s”). Dacă ați instalat nodejs dintr-un pachet, nu veți găsi niciun fișier în folderul lib.

Nodejs are module cu diferite grade de stabilitate. (de exemplu, 0 – nu trebuie folosit; 1, 2 – poate fi folosit, dar API-ul modulului se poate schimba).

Funcțiile cresc (proiectul se dezvoltă) și în timp va trebui să mutăm funcția constructor USER într-un fișier separat. Aici intră în joc modulele.

Modulele sunt un fel de modalitate pe care nodejs o oferă pentru a organiza un proiect.

Proiectele tind să crească, ceea ce duce la dorința de a împărți proiectul în mai multe fișiere - aici intră în joc modulele.

cere

Pentru paginile HTML, etichetele de script sunt folosite pentru a include scripturi. Nodejs are o comandă special require.

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

În exemplul nostru, accesăm fișierul (user.js) în același director (extensia (.js) este opțională).

//require("./utilizator"); // .js nu este necesar să se specifice // în acest caz fișierul va fi executat, dar nu va exista nicio variabilă USER // aceasta este principala diferență față de etichetele de script de la nodejs // În node.js, funcțiile și variabilele ale fiecărui modul sunt globale // pentru acest fișier (modulul în sine) și nu devin automat // disponibile atunci când sunt conectate (require("./user")) // Dar cum să obțineți acces? // Fiecare modul are o variabilă specială exporturi - acesta este un obiect și ceea ce // am pus acolo va returna ca rezultat require var user = require("./user.js"); // rezultat: utilizator = ( Utilizator: funcție )

Prima diferență între sistemul modular nodejs și scripturile browserului: dacă există două etichete de script în browser, atunci o funcție care este definită la nivel global într-unul dintre ele este disponibilă în celălalt, dar nu în nodejs. În nodejs, funcțiile și variabilele sunt globale pentru un anumit fișier (nu sunt disponibile atunci când este necesar). Astfel, nodejs vă permite să scrieți module cu adevărat independente. Dar pentru ca modulul să fie disponibil, acesta este folosit sistem de export. Fiecare modul are o variabilă specială de export.

Modul-director DIR/index

Conectam direct folderul var user = require("./user"); , care conține index.js corespunzător.

De exemplu

Funcție User(nume)( this.name = nume; ) User.prototype.hello = function(who)( console.log(phrases.Hello + ", " + who.name); ); exports.User = Utilizator;

Ne conectăm și folosim constructorul User în fișierul ./server.js

//server.js var user = require("./user"); var vasya = utilizator nou.Utilizator("Vasya");

„./” - relativ la folderul curent

exports este un obiect și ceea ce este pus acolo va fi returnat ca rezultat al require (exports.jpg). În acest fel, modulul își poate declara variabilele/funcțiile private și poate exporta doar ceea ce este necesar.


Pentru variabile globale etc. există un obiect global

Global.User = Utilizator;

Concluzie

  • Necesită conexiune
  • Variabile: var (privat pentru module), exporturi, global (folosit rar)
  • Tipuri de module: js, node (cu extensia .node), json (cu extensia .json). Modulele Json sunt folosite atunci când trebuie să stocați informații simple într-un fișier.
  • Modul-director DIR/index

obiect modul

  • obiect modul
  • Module-funcție module.exports = funcție
  • Memorarea în cache a modulelor (modulul nu mai este citit niciodată)
  • Dispunerea modulului: ordinea de căutare
  • Parametri de trecere: modul-fabrica

Obiectul modul (obiectul fundamental pentru module) este o variabilă care există în fiecare modul (fișier, puteți scoate console.log(modul;);). . Conținut: proprietatea id – de obicei calea către fișier,
parent – ​​link la modulul părinte (module.parent – ​​link la modulul părinte care necesită acest lucru),
copii (module.children - acele module care sunt conectate prin necesită),
exportă proprietăți și altele.

Modul sau aplicație? modul.părinte

Modulul poate fi lansat direct, dar dacă nu, dacă funcționalitatea este conectată la alt modul, lăsați-l să exporte această funcționalitate. Aceste două cazuri pot fi separate prin verificarea:

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


ps: așa cum se spune pe stackoverflow.com Părintele este modulul care a numit scriptul pentru interpretare

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

Utilizarea corectă a module.exports

În contextul unui modul:

module.exports = exports = this (aceste constructe sunt echivalente)

Dacă doriți să transmiteți o funcție nu într-un obiect, ci direct, atunci utilizați următoarea sintaxă:

Module.exports = Utilizator;


Memorarea în cache a modulelor

Când Nodejs încarcă un modul, creează complet obiectul modul corespunzător (ținând cont de părinte, exporturi și alte proprietăți similare) și îl reține în sine (module.id (calea completă către fișier) servește ca identificator pentru memoria cache internă ) și data viitoare când accesăm din nou (conectăm) la orice modul (fișier), nodejs preia același obiect din cache. Adică, de exemplu, este suficient să inițializați un modul o dată într-un fișier; în viitor îl puteți utiliza pur și simplu.

În cazul nostru, pentru var db = require("../db");
iar pentru var db = require("./db"); se ia acelasi obiect. Prin urmare, principiul este următorul: prima dată când se folosește un modul, acesta este inițializat și pe viitor doar îl conectăm și îl folosim (adică în cazul nostru nu este nevoie să folosim db.connect() de două ori, adică în fişiere diferite).


Dispunerea modulelor: ordinea în care se găsesc modulele în nodejs

Cum se face ca db să se conecteze întotdeauna fără a specifica o cale specifică:

Var db = cere("../db"); //sau var db = require("./db");

si cam asa:

Var db = require("db");

indiferent de fișierul în care este conectat db.

Pentru a face acest lucru, trebuie să înțelegeți ordinea de căutare a modulelor în nodejs (ce se întâmplă când se apelează require). Există multe module încorporate în nodejs, de exemplu require("fs"); , care va fi conectat fără probleme. Dacă specificați o cale specifică în require, de exemplu, require("../db"); , atunci căutarea se va baza pe calea dată și fișierul va fi găsit, sau nodejs va încerca să obțină acest fișier ca director (și va căuta index.js în cadrul categoriei).

Dacă specificați require("db"); iar modulul nu este încorporat, atunci directorul node_modules va fi căutat în raport cu poziția curentă (dacă este găsită, va încerca să ia modulul din acesta). Dacă directorul node_modules lipsește, atunci directorul node_modules va fi căutat mai sus etc.

Pe lângă specificarea unei căi specifice pentru un modul, nodejs poate căuta module ca acesta:

Introducere în npm - managerul de pachete pentru Node.JS

  1. creați un fișier de descriere a pachetului (package.json) care conține informații despre modul (nume, versiune etc.). Fie manual, fie prin comandă
    npm init
    (va cere informațiile necesare)
  2. Pentru a publica un modul, trebuie să:
    1. Adăugați un utilizator utilizând comanda npm adduser (trebuie să introduceți numele de utilizator și parola). Acum toate lucrările cu npm vor fi făcute în numele acestui utilizator. Utilizatorul se poate conecta la https://www.npmjs.com/~name_user și își poate monitoriza modulele.
    2. Publicare: npm publish
  3. Apoi cineva poate folosi modulul dvs. adăugat la baza de date, iar utilizatorul însuși poate face modificări.
  4. Obțineți toate comenzile npm folosind comanda npm help
  5. Căutați un modul în baza de date: cuvinte cheie npm s sau cuvinte cheie de căutare npm (de exemplu, super modulul npm)
  6. Instalați modulul: npm install name_module sau npm i name_module
  7. Când instalează module, nodejs caută mai întâi folderul node_modules în directorul curent (apoi din ce în ce mai sus, etc.) sau (dacă lipsește node_modules) caută package.json (de asemenea, urcând; package.json denotă de obicei rădăcina lui proiectul) și, în consecință, dacă găsește package.json, creează un folder node_modules în directorul corespunzător; dacă ambele opțiuni eșuează, atunci nodejs creează un folder node_modules în directorul curent. Dacă doriți să plasați un modul într-un anumit director, atunci trebuie să creați un folder node_modules în acel director.
  8. Modul de actualizare npm up (va verifica modulele de actualizare care se află în folderul node_modules)
  9. npm remove modulename (elimină modulul)

Ieșire de la npm:

npm init
nmp adduser
npm publică
cuvinte cheie de căutare npm
modul de instalare npm
modulul de actualizare npm
npm elimina modulul
comanda de ajutor npm

Structura pachetului NPM

Instalarea versiunii necesare, de exemplu: npm i [email protected]

Cea mai recentă versiune a modulului poate fi obținută dacă modulul este dezvoltat folosind sistemul de versiuni git, de exemplu, pe github. Este suficient să obțineți Git Read-Only (url): https://github.com/strongloop/express.git și în consolă:

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

dependențe în package.json

dependențele indică acele module de care aceasta depinde.

dependențe de dezvoltare

Modulele înregistrate în devDependencies nu sunt instalate dacă modulul este extras ca dependență. Sunt instalate doar pentru dezvoltare și pot fi instalate dacă, de exemplu, mergeți la modulul din folderul node_modules și introduceți npm i (sau setând flag-ul de configurare npm).

câmpul principal specifică punctul de intrare în pachet

Module globale

Orice modul poate fi instalat global dacă setați indicatorul -g: modulul npm -g

Global înseamnă directorul de sistem.

Director de module globale pentru Windows:

C:\utilizatori\Nume_utilizator\AppData\Roaming\npm

Modulele globale sunt plasate în directorul de sistem standard. Acele binare care sunt în package.json vor fi instalate pe calea sistemului (aceasta este principala utilizare a modulelor globale), adică în viitor pot fi apelate prin consolă.

Pe baza materialelor din cursurile lui I. Kantor

​Bună băieți, în articolul de astăzi vreau să vorbesc despre variabilele globale în Node. Acest articol se adresează dezvoltatorilor care au un nivel de abilități începător până la mediu care lucrează cu Node. Dacă nu ați auzit niciodată de variabile globale sau ați lucrat cu ele, nu trebuie să vă faceți griji. Acest articol vă va pune în funcțiune în cel mai scurt timp cu tot ce trebuie să știți despre variabilele globale.

Ce sunt variabilele globale?

Variabilele globale sunt foarte asemănătoare, dacă nu identice, cu variabilele obișnuite. Variabilele globale pot fi inițializate cu o valoare, acea valoare poate fi modificată și pot fi chiar șterse ca o variabilă obișnuită. Diferența dintre o variabilă obișnuită și o variabilă globală se rezumă la domeniul lor. Când creați o variabilă într-un fișier JavaScript, variabilele respective există doar în domeniul în care a fost declarată. Acum ce vreau să spun cu asta? În codul de mai jos, puteți vedea un exemplu de două variabile diferite cu domenii diferite.

// Scope.js let fileScope = "Poate fi accesat oriunde în fișier"; function doSomething() ( let localScope = „Poate fi accesat numai în interiorul acestei funcții”; fileScope = „Poate fi accesat și în funcție!”; ) // Aceasta va duce la o eroare deoarece variabila nu există // în afara funcţie. localScope = "Încercați să mă schimbați aici";

În fragmentul de cod de mai sus, putem vedea că există două variabile, fileScope și localScope . Variabila fileScope poate fi schimbată sau apelată de oriunde în acest fișier, în timp ce variabila localScope există doar în cadrul funcției doSomething() . Sunt sigur că în acest moment vă întrebați ce legătură are asta cu variabilele globale. Când vorbim despre variabilele globale, ele există pentru toate fișierele dintr-un program, ceea ce înseamnă că au un domeniu de aplicare global pentru program.

Motivul pentru care acest lucru este posibil este că programele JavaScript partajează un spațiu de nume global între toate fișierele din program. Pentru a spune altfel, imaginați-vă că programul dvs. este un fișier sau un container gigant care a „importat” toate celelalte fișiere JavaScript. Apoi declarați o variabilă în acest fișier container mare, acea variabilă are acum domeniu de aplicare în întregul program. Dacă nu sunteți sigur ce este un spațiu de nume sau doriți să aflați mai multe despre el, consultați acest articol pentru a afla mai multe.

Cum să declarați și să utilizați o variabilă globală

Acum că înțelegem mai bine ce este o variabilă globală în Node, să vorbim despre modul în care setăm și folosim de fapt o variabilă globală. Pentru a configura o variabilă globală, trebuie să o creăm pe obiectul global. obiectul global este ceea ce ne oferă domeniul de aplicare al întregului proiect, mai degrabă decât doar fișierul (modulul) în care a fost creată variabila. În blocul de cod de mai jos, creăm o variabilă globală numită globalString și îi dăm o valoare. Apoi, vom modificați valoarea globalString și apoi o setăm la nedefinit.

// Global.js global.globalString = "Acest lucru poate fi accesat oriunde!"; console.log(globalString); // Ieșire: „Acest lucru poate fi accesat oriunde!” globalString = „Verifică-mă acum”; console.log(globalString); // Ieșire: „Verifică-mă acum” globalString = nedefinit; console.log(globalString); // Ieșire: nedefinit // Exemplu.js // Putem folosi globalul creat în Global.js și în acest fișier //. console.log(globalString); // Ieșire: undefined globalString = „Îl putem schimba și noi!”; console.log(globalString); // Ieșire: „Îl putem schimba și noi!”

Ceea ce nu am vorbit încă este un alt mod prin care puteți face o variabilă globală. Motivul pentru care am exclus acest lucru este că nu este o modalitate adecvată de a configura o variabilă. Dacă declarați o variabilă într-un fișier fără a utiliza cuvântul cheie var și apoi îi atribuiți o valoare, obiectul global va seta o proprietate pentru această variabilă. Acest proces îl transformă în esență într-o variabilă accesibilă la nivel global. Vă sfătuiesc cu tărie să nu folosiți această metodă, deoarece nu este modalitatea potrivită de a crea globaluri. De asemenea, este important să rețineți că, dacă setați directiva „utilizați strict”, Node va dezactiva valorile globale implicite și probabil veți ajunge cu o eroare în timpul execuției, mai degrabă decât cu un script de lucru.

Cazuri practice de utilizare pentru variabile globale

Acum, s-ar putea să vă gândiți că doriți să porniți și să creați variabile globale acum că știți mai multe despre ele. Voi avertiza cu tărie împotriva creării de variabile globale din câteva motive foarte importante.

Primul motiv este că atunci când creați o variabilă globală, aceasta există pe toată durata de viață a aplicației. Când o variabilă persistă pe durata de viață a aplicației, înseamnă că este acolo, în memorie, ocupând resurse în timp ce aplicația rulează.

În al doilea rând, utilizarea în mod tradițional a variabilelor globale poate cauza probleme de concurență. Dacă mai multe fire de execuție pot accesa aceeași variabilă și nu există modificatori de acces sau sisteme de siguranță, poate duce la unele probleme serioase ale a două fire de execuție care încearcă să acceseze și să utilizeze aceeași variabilă. in orice caz, deși acesta este cazul în alte limbi, nu este neapărat cazul pentru Node.js, deoarece este strict un mediu cu un singur thread. În timp ce acesta este posibil să clusterizați procesele Node, nu există o modalitate nativă de a comunica între ele.

Ultimul motiv despre care voi vorbi este că utilizarea globalelor poate cauza cuplare implicită între fișiere sau variabile. Cuplarea nu este un lucru bun când vine vorba de scrierea unui cod grozav. Când scriem cod, dorim să ne asigurăm că este cât mai modular și reutilizabil posibil, asigurându-ne totodată că este ușor de utilizat și de înțeles. Cuplarea unor părți din codul dvs. poate duce la unele dureri de cap majore pe drum atunci când încercați să depanați de ce ceva nu funcționează.

Dacă doriți să aflați mai multe despre motivul pentru care nu sunt recomandate valorile globale, puteți consulta acest articol grozav numit Global Variables Are Bad.

Dacă vă simțiți confuz în ceea ce privește scopul variabilelor globale, nu vă temeți. Vom arunca o privire la câteva dintre variabilele globale care sunt încorporate în Node și vom încerca să înțelegem mai bine de ce sunt globale și cum sunt utilizate. De fapt, probabil că ați folosit deja câteva dintre ele fără să vă dați seama că sunt obiecte globale!

// Node Globals console.log("Bună lume!"); process.env.PORT = 3000; setInterval(( console.log ("Au trecut 2 secunde."); 2000);

Dacă aruncați o privire la blocul de cod de mai sus, probabil că veți vedea cel puțin o instanță pe care ați folosit-o înainte, console.log() . Conform documentației Node, obiectul consolă este un global care are câteva metode care le permit dezvoltatorilor să facă lucruri precum imprimarea unui jurnal sau o eroare. Săpând mai adânc în documente, putem vedea că consola este într-adevăr o instanță globală care este configurată să scrie în process.stdout și process.stderr .

Acest lucru ne duce la următoarea declarație pe care o vedeți în blocul de cod de mai sus, obiectul procesului. Dacă ați creat o versiune de producție a unei aplicații Node, atunci probabil a trebuit să setați portul pentru variabila de mediu. Variabila de mediu env este o parte a obiectului proces care este un alt global. Puteți accesa variabilele din obiectul proces din orice fișier din proiectul dvs. deoarece este global. Dacă acest obiect nu ar fi global, nici obiectul consolă nu ar fi accesibil din niciun fișier, amintiți-vă că este într-adevăr un obiect care se referă la obiectul proces.

setInterval este o altă funcție pe care ați mai văzut-o înainte dacă ați avut vreodată motive să întârzieți o operație înainte de a o executa. setTimeout și setImmediate sunt de natură similară cu setInterval și sunt ambele funcții globale. Aceste trei funcții fac parte din modulul cronometru care expune un API global care vă permite să apelați aceste funcții fără a necesita în mod explicit cronometru în fișierele dvs.

Toate cazurile de utilizare menționate mai sus sunt încorporate în Node și sunt globale dintr-un motiv. Obiectul proces este global deoarece oferă informații despre procesul curent Node care rulează și, prin urmare, ar trebui să fie disponibil din orice fișier fără a fi necesar. Același lucru se poate spune și despre modulul cronometru care conține o serie de funcții care sunt importante și ar trebui să fie accesibile oriunde, fără a fi necesar. Dacă doriți să aflați mai multe despre obiectele globale existente încorporate în Node, vă încurajez să vizitați documentația oficială despre Globals.

Află mai multe

Doriți să aflați mai multe despre elementele fundamentale ale Node.js? Personal, aș recomanda un curs online, cum ar fi Wes Bos" Learn Node.js, deoarece videoclipurile sunt mult mai ușor de urmărit și veți putea de fapt să construiți o aplicație în lumea reală.

Concluzie

Știu că a fost destul de puțină informație, așa că îți mulțumesc că ai dat-o. Toate informațiile de mai sus au fost găsite în documentația de pe site-ul web Node. Vă rugăm să nu ezitați să puneți întrebări și să comentați în secțiunea de comentarii de mai jos. Până data viitoare băieți!

JavaScript are un obiect special numit Global Object, acesta și toate atributele sale pot fi accesate oriunde în program, o variabilă globală.

Un browser JavaScript este de obicei un obiect fereastră global, un obiect global Node.js este un obiect global, toate variabilele globale (cu excepția eului global) sunt deținute de obiectul global.

În Node.js avem acces direct la proprietățile globale, fără a fi necesar să îl includem în aplicație.

Obiecte globale și variabile globale

Cel mai fundamental rol global este ca o variabilă gazdă globală. După definiția ECMAScript, următoarele condiții sunt variabile globale:

  • Este definită variabila Extern;
  • Proprietăți globale ale obiectului;
  • Variabila este definită implicit (alocarea directă la variabile nedefinite).

Când definiți o variabilă globală, variabila va deveni și proprietatea obiectului global și invers. Rețineți că, în Node.js, nu puteți defini variabile într-un context extern, deoarece tot codul utilizatorului face parte din modulul curent, iar modulul în sine nu este un context extern.

Notă: folosiți întotdeauna var pentru a defini variabilele pentru a evita introducerea unei variabile globale, deoarece variabilele globale vor polua spațiul de nume, crescând riscul codului de comunicare.

__nume de fișier

__filename specifică numele fișierului scriptului care rulează în prezent. Calea absolută către locația în care va fi fișierul de ieșire, dar opțiunea de linie de comandă și specificarea numelui fișierului nu sunt neapărat aceleași. Dacă într-un modul, valoarea returnată este calea către fișierul modulului.

exemple

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

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

__dirname

__dirname reprezintă directorul de script aflat în prezent.

exemple

Creați un fișier main.js, cod astfel:

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

Fișierul executabil main.js, codul arată astfel:

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

setTimeout(CB, ms)

setTimeout(C - Bi, ms): Funcția SetTimeout() este specificată o singură dată.

Returnează valoarea mânerului care reprezintă cronometrul.

exemple

Creați un fișier main.js, cod astfel:

Funcția printHello())( console.log("Bună ziua, lume!"); ) // setTimeout(printHello, 2000);

Fișierul executabil main.js, codul arată astfel:

$ node main.js Bună ziua, lume!

clearTimeout(t)

clearTimeout(t) este folosit pentru a opri funcția globală înainte de a trece setTimeout() pentru a crea cronometrul. Parametru Funcția T setTimeout() pentru a crea un calculator.

exemple

Creați un fișier main.js, cod astfel:

Funcția printHello())( console.log("Bună ziua, lume!"); ) // var t = setTimeout(printHello, 2000); // 清除定时器 clearTimeout(t);

Fișierul executabil main.js, codul arată astfel:

$nodemain.js

setInterval(CB, ms)

setInterval(C - Bi, ms) Funcția globală execută funcția specificată după un număr specificat de milisecunde (ms) Număr (CB).

Returnează valoarea mânerului care reprezintă cronometrul. Puteți utiliza funcția clearInterval(T) pentru a șterge temporizatorul.

Metoda setInterval() va continua să apeleze funcția până când clearInterval() este apelat sau fereastra este închisă.

exemple

Creați un fișier main.js, cod astfel:

Funcția printHello())( console.log("Bună ziua, lume!"); ) // setInterval(printHello, 2000);

Fișierul executabil main.js, codul arată astfel:

$ node main.js Bună ziua, lume! Salut Lume! Salut Lume! Salut Lume! Salut Lume! ......

Programul de mai sus va afișa „Hello, World!” o dată la două secunde și se va executa continuu până când butonul este apăsat CTRL + C.

consolă

Consola Consola pentru furnizarea de ieșire standard, care este facilitatea de depanare furnizată de motorul JScript în Internet Explorer și a devenit mai târziu browserul standard de facto.

Node.js urmează acest standard, asigurând comportamentul și obiceiurile consecvente ale obiectului consolă utilizat în caracterele de ieșire ale fluxului standard de ieșire (STDOUT) sau ale fluxului de erori standard (STDERR).

metoda consolei

Mai jos este obiectul consolei:

Nu.Metoda si descrierea
1 console.log([date] [, ... ])
Pentru caractere standard imprimabile flux de ieșire și se termină cu un caracter newline. Această metodă acceptă mai mulți parametri, dacă există un singur parametru, atunci rezultatul este un șir al acestui parametru. Dacă există mai multe argumente, locuri precum formatul de ieșire al comenzii în C E().
2 console.info([date] [, ... ])
Rolul P al comenzii returnează un mesaj informativ, comanda console.log nu face mare diferență, în plus față de chrome, va fi afișat doar text, restul va afișa un semn de exclamare albastru.
3 console.error([date] [, ... ])
Ieșire mesaj de eroare. Consola va afișa roșu atunci când apare o eroare de furcă.
4 console.warn([date] [, ... ])
Este afișat un mesaj de avertizare. Consola se afișează cu un semn de exclamare galben.
5 console.dir(OBJ[, opțiuni])
Obiect folosit pentru inspecție (inspecție) și formate de afișare și imprimare ușor de citit.
6 console.time (comandă rapidă)
Timp de ieșire, ora de începere.
7 console.timeEnd(comandă rapidă)
Ora de sfârșit, care indică sfârșitul timpului.
8 console.trace(mesaj [, ...])
Codul implementează în prezent calea apelului pe stivă, rularea acestei funcții de testare este utilă, vreau doar să testez funcția care este alăturată de console.trace pe linie.
9 console.assert(valoare[, mesaj][, ...])
Pentru a determina dacă o variabilă sau o expresie este adevărată, au fost necesari doi parametri, primul parametru este o expresie și al doilea argument este un șir. Numai când primul argument este fals, atunci rezultatul va fi al doilea argument; nu va avea niciun rezultat.
console.log(): Imprimă la ieșirea standard și se încheie cu o linie nouă.

console.log acceptă mai mulți parametri, dacă există un singur parametru, șirul de ieșire al acelui parametru. Dacă există mai multe argumente, locuri precum formatul de ieșire al comenzii în C E().

Primul parametru este un șir, fără parametri, doar tipăriți un caracter newline.

Console.log("Bună lume"); console.log("byvoid%diovyb"); console.log("byvoid%diovyb", 1991);

Bună lume, byvoid%diovyb byvoid1991iovyb

  • console.error(): Cu console.log() face același lucru, dar iese la eroare standard.
  • console.trace(): Stream erori la ieșirea standard a stivei de apeluri curente.
console.trace();

Rezultate operaționale după cum urmează:

Urmă: la Obiect. (/home/byvoid/consoletrace.js:1:71) la Module._compile (module.js:441:26) la Object..js (module.js:459:10) la Module.load (module.js: 348:31) la Function._load (module.js:308:12) la Array.0 (module.js:479:10) la EventEmitter._tickCallback (node.js:192:40)

exemple

Creați un fișier main.js, cod astfel:

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

Fișierul executabil main.js, codul arată astfel:

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

proces

Un proces este o variabilă globală, un atribut este un obiect global.

Este folosit pentru a descrie starea curentă de proces a unui obiect Node.js și oferă o interfață simplă pentru sistemul de operare. De obicei, scrieți propriile programe de linie de comandă și ajungeți să vă ocupați de ele. Mai jos vom prezenta unele dintre cele mai frecvent utilizate metode de contestare a procesului de către membri.

Nu.Evenimente și descriere
1 Ieșire
Se declanșează când procesul este gata să se închidă.
2 înainte de Ieșire
Acest eveniment este declanșat atunci când nodul are o buclă de evenimente goală și nu este întreprinsă nicio altă acțiune. În general, nu există un proces de organizare a unui nod de ieșire, dar ascultătorii „beforeExit” pot fi apelați asincron, astfel încât nodul să continue.
3 Exceptie neprinsa
Când o excepție este introdusă înapoi în bucla de evenimente, ridicați acest eveniment. Dacă adăugați un monitor la o excepție, acțiunea implicită (imprimare stivă și ieșire) nu va avea loc.
4 Semnalul este declanșat când
eveniment când procesul primește un semnal.
Examinați lista de nume de semnal POSIX standard, cum ar fi SIGINT, SIGUSR1 și așa mai departe.

exemple

Creați un fișier main.js, cod astfel:

Process.on("exit", function(cod) ( // setTimeout(function() ( console.log("该代码不会执行"); 0); console.log("退出码为:", cod) ; )); console.log("程序执行结束");

Fișierul executabil main.js, codul arată astfel:

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

Codurile de stare de ieșire

Codurile de stare de ieșire sunt următoarele:

Cod de stareTitlul și descrierea
1 Excepție fatală neprinsă
Există o excepție neprinsă și nu a fost gestionată sau domeniul handler-ului uncaughtException.
2 nefolosit
retenţie
3 Analiza erorilor interne JavaScript
Eroarea JavaScript la analizarea codului sursă este apelată când începe procesul Node. Foarte rar, doar când Node.
4 Scor de eroare JavaScript intern
Procesul JavaScript care rulează nodul sursă returnează eșec la evaluarea funcției. Foarte rar, doar când Node.
5 Eroare fatala
V8 într-o eroare necorecabilă cu un rezultat fatal. De obicei, tipăriți Stderr, conținut: eroare fatală
6 Handler intern de excepții non-funcțional
Excepție neprinsă, handlerul de excepție din interior este setat cumva la funcție și, de asemenea, nu poate fi apelat.
7 Eroare de excepție a manevrării interne a timpului de rulare
Excepție neprinsă, iar handler-ul de excepție care se ocupă de propriul său lansează o excepție. De exemplu, dacă process.on(„uncaughtException”) sau domain.on(„eroare”) lansează o excepție.
8 nefolosit
retenţie
9 Argument invalid
Poate fi parametri necunoscuți sau parametru la valoare.
10 Timpul de execuție JavaScript intern a eșuat
Codul sursă JavaScript este generat atunci când sunt declanșate erori în procesul Node, foarte rar, doar când există dezvoltarea Node.
12 Argument de depanare nevalid
--debug opțiunea setată și/sau --debug-BRK, dar a selectat portul greșit.
> 128 Ieșiri de semnal
Dacă un nod primește un semnal fatal, cum ar fi SIGKILL sau SIGHUP, atunci codul de întoarcere este 128 plus codul de semnal. Aceasta este practica standard Unix, cod înalt pe semnalele de ieșire.

atributele procesului

Procesul oferă multe proprietăți utile, ușurință de interacțiune, pe care le putem controla mai bine sistemul:

Cant.Proprietate și descriere
1 STDOUT
Flux de ieșire standard.
2 STDERR
Flux de erori standard.
3 STDIN
Flux de intrare standard.
4 ARGV
Proprietatea ARGV returnează o serie de opțiuni diferite pentru executarea unui script de linie de comandă atunci când compune. Primii săi membri sunt întotdeauna un nod, al doilea membru este numele fișierului script, iar membrii rămași sunt parametrii fișierului script.
5 execPath
Returnează calea absolută a nodului binar de execuție a scriptului curent.
6 execArgv
Returnează membrul matricei situat sub scriptul de linie de comandă executat între parametrii de linie de comandă executabili de nod ai fișierului de script.
7 ENV
Returnează un obiect, membrii variabilei de mediu shell curente
8 ExitCode
Codul de ieșire pentru proces, dacă procesul este prezentat cu proces.exit() exit, fără a specifica un cod de ieșire.
9 versiune
versiunea nodului, cum ar fi v0.10.18.
10 versiuni
O proprietate care conține versiunile de noduri și dependențe.
11 config
Obiectul care conține nodul curent este utilizat pentru a compila fișierul de configurare a opțiunilor javascript executabil. Acesta este același script run./configure creat de fișierul „config.gypi”.
12 PID - regulator
Numărul curent al procesului.
13 Nume
Nume proces, „nod” implicit, puteți personaliza valoarea.
14 arc
Arhitectura curentă a CPU: „arm”, „ia32” sau „64”.
15 platformă
Rulați programul în care platforma este „Darwin”, „FreeBSD”, „Linux”, „SunOS” sau „win32”
16 MainModule
necesită.principale metode alternative. În diferite puncte, dacă modulul principal se modifică în timpul execuției, require.main poate continua să revină la modulul vechi. Ambele sunt considerate ca aparținând aceluiași modul.

exemple

Creați un fișier main.js, cod astfel:

// 输出到终端 process.stdout.write("Bună lume!" + "\n"); // 通过参数读取 process.argv.forEach(function(val, index, array) ( console.log(index + ": " + val); )); // 获取执行路局 console.log(process.execPath); // 平台信息 console.log(process.platform);

Fișierul executabil main.js, codul arată astfel:

$ node main.js Bună lume! 0: nodul 1: /web/www/node/main.js /usr/local/node/0.10.36/bin/node darwin

Ghid de referință al metodei

Procesul oferă multe metode utile pentru a facilita un control mai eficient al sistemului nostru interactiv:

Nu.Metoda si descrierea
1 anula()
Acest lucru va ridica evenimentul de declanșare a nodului de întrerupere. Acest lucru va face ca nodul să iasă și să creeze un fișier dump.
2 ChDir (director)
Schimbați directorul de lucru curent al procesului dacă operațiunea nu se poate închide.
3 URECHE ()
Returnează directorul de lucru al procesului curent
4 ieșire([cod])
Încheie procesul cu codul specificat. Dacă acest parametru este omis, va folosi codul 0.
5 getgid()
Obțineți identificarea grupului de procese (vezi getgid(2)). Când un grup a fost achiziționat un ID digital mai degrabă decât un nume.
6 setgid(ID)
Configurarea procesului de identificare a grupului (vezi setgid (2)). ID-ul poate lua un nume numeric sau de grup. Dacă specificați un nume de grup, blocarea va fi permisă în așteptarea unui ID digital.
Notă: Această funcție poate fi utilizată (de exemplu, non-Windows și Android) numai pe platformele POSIX.
7 getuid()
Obțineți procesul de identificare a utilizatorului (vezi getuid(2)). Acesta este un ID de utilizator numeric, nu un nume de utilizator.
Notă: Această funcție poate fi utilizată (de exemplu, non-Windows și Android) numai pe platformele POSIX.
8 UIP (ID)
ID utilizator de configurare a procesului (consultați UIP (2)). Preluarea unui identificator digital sau a unui șir de nume. Dacă specificați un nume de grup, blocarea va fi permisă în așteptarea unui ID digital.
Notă: Această funcție poate fi utilizată (de exemplu, non-Windows și Android) numai pe platformele POSIX.
9 getgroups()
Procesul de returnare a matricei ID de grup. Sistemul POSIX nu garantează că este, dar Node.js este garantat că va fi acolo.
Notă: Această funcție poate fi utilizată (de exemplu, non-Windows și Android) numai pe platformele POSIX.
10 setgroups
Setați ID-ul grupului de procese. Este eligibil să funcționeze, tot ce aveți nevoie este să aveți privilegii de superutilizator sau să aveți capacitatea CAP_SETGID.
Notă: Această funcție poate fi utilizată (de exemplu, non-Windows și Android) numai pe platformele POSIX.
11 initgroups(utilizator, extra_group)
Citirea / etc. /group și inițializează lista de acces la grup, toți membrii grupului sunt localizați. Este eligibil să funcționeze, tot ce aveți nevoie este să aveți privilegii de superutilizator sau să aveți capacitatea CAP_SETGID.
Notă: Această funcție poate fi utilizată (de exemplu, non-Windows și Android) numai pe platformele POSIX.
12 ucide (IDP [semnal])
Trimite un semnal unui proces. ID-ul este identificatorul procesului, iar semnalul este un șir care indică semnalul transmis. Numele semnalelor sunt șiruri precum „SIGINT” sau „” SIGHUP. Dacă acest parametru este omis, semnalul va fi „SIGTERM”.
13 Folosirea memoriei()
Returnează un obiect care descrie procesul utilizat de octeții de stare a memoriei nodului.
14 următorul Bifare (apel invers)
După ce se termină bucla de eveniment de apel invers al funcției curente.
15 Umask ([mască])
Setați sau citiți fișierul masca de proces. Procesele copil moștenesc această mască de la procesul părinte. Dacă argumentul mască este adevărat, atunci returnează vechea mască. În caz contrar, returnează masca curentă.
16 A petrecut()
Returnează numărul de secunde în care Node a pornit deja.
17 hrtime()
Rezoluția în timp a procesului curent, specificată ca [secunde] matrice nanosecunde. Acest lucru este relativ la orice eveniment trecut. Această valoare nu are nimic de-a face cu data, deci nu afectează deplasarea ceasului. Scopul principal este măsurarea performanței programului pe o perioadă precisă de timp.
Înainte ca rezultatul să poată fi transmis procesului curent.hrtime(), acesta va returna diferența de timp dintre ele, pentru măsurarea de referință și a intervalului de timp.

exemple

Creați un fișier main.js, cod astfel:

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

Într-un nod, puteți seta variabile globale folosind obiectul „global” sau „GLOBAL”:

GLOBAL._ = require("subliniere"); // dar „nu ar trebui” să faci asta! (vezi nota de mai jos)

sau mai util...

GLOBAL.window = GLOBAL; // ca în browser

Din nod, puteți vedea că sunt cusute împreună:

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

În codul de mai sus, „acest” este contextul global. Cu modulul commonJS (pe care îl folosește nodul), acest „obiect” din interiorul modulului (adică „codul tău”) NU este contextul global. Pentru dovada acestui lucru, vedeți mai jos unde am aruncat „acest” obiect și apoi uriașul obiect „GLOBAL”.

Console.log("\nACEST:"); console.log(aceasta); console.log("\nGLOBAL:"); console.log(global); /* iese... ACEST: {} GLOBAL: ( ArrayBuffer: , Int8Array: ( BYTES_PER_ELEMENT: 1 ), Uint8Array: ( BYTES_PER_ELEMENT: 1 ), Int16Array: ( BYTES_PER_ELEMENT: 2 ), Uint16Array: ( BYTES_PER_ELEMENT: 2 ), Int32BYTES_PER_ELEMENT:_int32BYTES_PER_ELEMENT:_int32BYTES_PER_ELEMENT:_int _ELEMENT: 4 ), Float32Array: ( BYTES_PER_ELEMENT: 4 ), Float64Array: ( BYTES_PER_ELEMENT: 8 ), DataView: , global: , proces: ( EventEmitter: , titlu: "nod", assert: , versiune: "v0.6.5", _tickCallback: , moduleLoadList: [ „Evaluări obligatorii”, „Legarea nativilor”, „Evenimente NativeModule”, „Buffer NativeModule”, „Buffer de legare”, „Assert NativeModule”, „Util NativeModule”, „Calea NativeModule”, „Modulul NativeModule”, „ NativeModule fs”, „Legarea fs”, „Constante de legare”, „Fluxul NativeModule”, „Consola NativeModule”, „Legarea tty_wrap”, „NativeModule tty”, „NativeModule net”, „Cronometre NativeModule”, „Legarea timer_wrap”, „ NativeModule _linklist" ], versiuni: ( nod: "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: [ „nod”, „/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:m",/:" TERMSHELLSocket:m",/:"/" , TMPDIR: „/var/folders/2h/2hQmtmXlFT4yVGtr5DBpdl9LAiQ/-Tmp-/”, Apple_PubSub_Socket_Render: „/tmp/launch-9Ga0PT/Render”, UTILIZATOR: „ddopson”, COMMAND_MODE: „SOCKSH:_00Hmp”, „SOCK:_00Htp”, „SOCK:_00Hmp”, lansați -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: „Implicit”, SHLVL: „1”, COLORFGBG: „7;0”, HOME : „/Utilizatori/ddopson”, ITERM_SESSION_ID: „w0t0p0”, LOGNAME: „ddopson”, DISPLAY: „/tmp/launch-l9RQXI/org.x:0”, OLDPWD: „/workspace/zd/zgap/darwin- js /external", _: "./index.js"), openStdin: , ieșire: , pid: 10321, caracteristici: ( depanare: fals, uv: adevărat, ipv6: adevărat, tls_npn: fals, tls_sni: adevărat, tls : true ), kill: , execPath: "/usr/local/bin/node", addListener: , _needTickCallback: , on: , removeListener: , reallyExit: , chdir: , debug: , eroare: , cwd: , watchFile: , umask : , getuid: , unwatchFile: , mixin: , setuid: , setgid: , createChildProcess: , getgid: , moștenește: , _kill: , _byteLength: , mainModule: ( id: ". ", exportă: (), părinte: null, nume fișier: "/workspace/zd/zgap/darwin-js/index.js", încărcat: fals, ieșit: false, copii: , căi: ), _debugProcess: , dlopen: , uptime: , memoryUsage: , uvCounters: , binding: ), GLOBAL: , root: , Buffer: ( poolSize: 8192, isBuffer: , byteLength: , _charsWritten: 8 ), setTimeout: , setInterval: , clearInterval: , clearInterval: , clearInterval consola: , fereastra: , navigator: () ) */

**Notă: În ceea ce privește setarea „GLOBAL._”, în general, ar trebui să faceți doar var _ = require(„subliniere”); . Da, faci asta în fiecare fișier care folosește caractere de subliniere, la fel ca în Java, importi com.foo.bar; . Acest lucru face mai ușor să determinați ce face codul dvs., deoarece legăturile dintre fișiere sunt „explicite”. Ușor enervant, dar bun. Aceasta este o predică.

Există o excepție de la fiecare regulă. Am avut exact un caz în care trebuia să setez „GLOBAL._”. Cream un sistem pentru definirea fișierelor „config” care erau în mare parte JSON, dar „scrise în JS” pentru a adăuga puțin mai multă flexibilitate. Nu existau instrucțiuni „require” în astfel de fișiere de configurare, dar am vrut ca acestea să aibă acces la subliniere (întregul sistem se baza pe modele de subliniere și subliniere), așa că aș seta „GLOBAL._” înainte de a evalua „config”. Deci da, pentru fiecare regulă există o excepție undeva. Dar ai un motiv întemeiat, nu doar „M-am săturat să tastez”, așa că vreau să încalc acordul”.