Variabel global node js. Dasar-dasar Nodejs. Panduan Referensi Metode

NODE.JS– alat perangkat lunak untuk mengeksekusi js.

Nodejs = V8 + I/O + perpustakaan

V8: cepat, modern, ekonomis

Keuntungan

  • skrip java
  • Kode umum pada klien dan server
  • Tugas web dasar
  • Banyak koneksi dan tugas pada saat bersamaan
  • Mudah untuk membuat prototipe yang berfungsi
  • Manajer paket npm yang nyaman
  • Masyarakat

Instalasi

Saat menginstal, nodejs menulis sendiri ke variabel PATH (+ npm), [administrasi - variabel lingkungan]; dapat diperiksa pada baris perintah:
atur JALUR

Sebagai aturan, file diluncurkan di bawah nodejs: mari kita menulis skrip sederhana dan menjalankannya melalui baris perintah:


Skrip akan dieksekusi dan hasilnya akan ditampilkan pada baris perintah.

Dokumentasi Nodejs

modul nodejs

Untuk memahami cara kerja modul nodejs bawaan, Anda perlu mengunduh arsip kode sumber dari situs web nodejs (kode sumber). Dan pergi ke direktori lib. (perintah dir - dapatkan daftar file melalui baris perintah; Jika Anda perlu membuat daftar file di semua subfolder, alih-alih "dir" gunakan "dir /s"). Jika Anda menginstal nodejs dari sebuah paket, Anda tidak akan menemukan file apa pun di folder lib.

Nodejs memiliki modul dengan derajat yang berbeda-beda stabilitas. (misalnya, 0 – tidak boleh digunakan; 1, 2 – dapat digunakan tetapi API modul dapat berubah).

Fungsinya berkembang (proyek berkembang) dan seiring waktu kita perlu memindahkan fungsi konstruktor USER ke file terpisah.

Di sinilah modul berperan.

Modul adalah sejenis cara yang ditawarkan nodejs untuk mengatur sebuah proyek.

Proyek cenderung berkembang, yang mengarah pada keinginan untuk membagi proyek menjadi beberapa file - di sinilah modul berperan.

memerlukan

Untuk halaman HTML, tag skrip digunakan untuk menyertakan skrip. Nodejs memiliki perintah khusus yang memerlukan.

Var pengguna = memerlukan("./pengguna");

//membutuhkan("./pengguna"); // .js tidak perlu ditentukan // dalam hal ini file akan dieksekusi, tetapi tidak akan ada variabel USER // ini adalah perbedaan utama dari tag skrip dari nodejs // Di node.js, fungsi dan variabel setiap modul bersifat global // untuk file ini (modul itu sendiri) dan tidak secara otomatis // tersedia saat terhubung (memerlukan("./pengguna")) // Namun bagaimana cara mendapatkan akses? // Setiap modul memiliki variabel khusus ekspor - ini adalah sebuah objek dan apa // yang saya taruh di sana akan dikembalikan sebagai hasilnya require var user = require("./user.js"); // hasil: pengguna = ( Pengguna: fungsi )

Perbedaan pertama antara sistem modular nodejs dan skrip browser: jika ada dua tag skrip di browser, maka fungsi yang ditentukan pada tingkat global di salah satunya tersedia di tag lainnya, tetapi tidak di nodejs. Di nodejs, fungsi dan variabel bersifat global untuk file tertentu (tidak tersedia saat diperlukan). Dengan demikian, nodejs memungkinkan Anda menulis modul yang benar-benar independen. Tapi agar modulnya tersedia, sudah digunakan sistem ekspor. Setiap modul memiliki variabel ekspor khusus.

Direktori modul DIR/index

Kami menghubungkan folder secara langsung var user = require("./user"); , yang berisi index.js yang sesuai.

Misalnya

Fungsi Pengguna(nama)( ini.nama = nama; ) Pengguna.prototipe.halo = fungsi(siapa)( konsol.log(frasa.Halo + ", " + siapa.nama); ); ekspor.Pengguna = Pengguna;

Kami menghubungkan dan menggunakan konstruktor Pengguna di file ./server.js

//server.js var pengguna = memerlukan("./pengguna"); var vasya = pengguna baru.Pengguna("Vasya");

"./" - relatif terhadap folder saat ini

ekspor adalah sebuah objek dan apa yang dimasukkan ke sana akan dikembalikan sebagai hasil dari kebutuhan (ekspor.jpg). Dengan cara ini modul dapat mendeklarasikan variabel/fungsi privatnya dan mengekspor hanya yang diperlukan.


Untuk variabel global, dll. ada objek global

Global.Pengguna = Pengguna;

Intinya

  • Diperlukan koneksi
  • Variabel: var (pribadi untuk modul), ekspor, global (jarang digunakan)
  • Jenis modul: js, node (dengan ekstensi .node), json (dengan ekstensi .json). Modul JSON digunakan ketika Anda perlu menyimpan beberapa informasi sederhana pada sebuah file.
  • Direktori modul DIR/index

objek modul

  • objek modul
  • Modul-fungsi module.exports = fungsi
  • Modul caching (modul tidak pernah dibaca lagi)
  • Susunan modul: urutan pencarian
  • Parameter yang lewat: modul-pabrik

Objek modul (objek dasar untuk modul) adalah variabel yang ada di setiap modul (file, Anda dapat menampilkan console.log(module;);). . Isi: properti id – biasanya jalur ke file,
parent – ​​​​link ke modul induk (module.parent – ​​​​link ke modul induk yang memerlukan ini),
anak-anak (module.children - modul-modul yang terhubung melalui kebutuhan),
mengekspor properti dan lain-lain.

Modul atau aplikasi? modul.orang tua

Modul dapat diluncurkan secara langsung, tetapi jika tidak, jika fungsionalitas tersebut terhubung ke modul lain, biarkan modul mengekspor fungsionalitas tersebut. Kedua kasus ini dapat dipisahkan dengan memeriksa:

If(modul.parent) ( ekspor.jalankan = jalankan; ) lain ( jalankan(); )


ps: seperti yang mereka katakan di stackoverflow.com Induk adalah modul yang memanggil skrip untuk interpretasi

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

Penggunaan module.exports dengan benar

Dalam konteks modul:

module.exports = ekspor = ini (konstruksi ini setara)

Jika Anda ingin meneruskan suatu fungsi bukan pada objek, tetapi secara langsung, gunakan sintaks berikut:

Module.exports = Pengguna;


Modul Caching

Ketika Nodejs memuat sebuah modul, ia sepenuhnya membuat objek modul yang sesuai (dengan mempertimbangkan induk, ekspor, dan properti serupa lainnya) dan mengingatnya sendiri (module.id (jalur lengkap ke file) berfungsi sebagai pengidentifikasi untuk cache internal ) dan saat berikutnya kita mengakses kembali (menghubungkan) ke modul (file) apa pun, nodejs mengambil objek yang sama dari cache. Artinya, misalnya, cukup menginisialisasi modul satu kali dalam sebuah file; di masa mendatang Anda cukup menggunakannya.

Dalam kasus kami, for var db = require("../db");
dan untuk var db = require("./db"); objek yang sama diambil. Oleh karena itu, prinsipnya adalah sebagai berikut: pertama kali sebuah modul digunakan, modul tersebut diinisialisasi dan selanjutnya kita hanya menghubungkannya dan menggunakannya (artinya, dalam kasus kita, kita tidak perlu menggunakan db.connect() dua kali, yaitu, dalam file yang berbeda).


Susunan modul: urutan modul ditemukan di nodejs

Cara membuat db selalu terhubung tanpa menentukan jalur tertentu:

Var db = memerlukan("../db"); //atau var db = memerlukan("./db");

dan seperti ini:

Var db = memerlukan("db");

terlepas dari file tempat db terhubung.

Untuk melakukan ini, Anda perlu memahami urutan pencarian modul di nodejs (apa yang terjadi ketika require dipanggil). Ada banyak modul bawaan di nodejs, misalnya require("fs"); , yang akan terhubung tanpa masalah. Jika Anda menentukan jalur tertentu di require, misalnya require("../db"); , maka pencarian akan didasarkan pada jalur yang diberikan dan file akan ditemukan, atau nodejs akan mencoba mendapatkan file ini sebagai direktori (dan akan mencari index.js di dalam kategori).

Jika Anda menentukan require("db"); dan modul tersebut tidak built-in, maka direktori node_modules akan dicari relatif terhadap posisi saat ini (jika ditemukan, ia akan mencoba mengambil modul darinya). Jika direktori node_modules tidak ada, maka direktori node_modules akan dicari di atas, dan seterusnya.

Selain menentukan jalur spesifik untuk sebuah modul, nodejs dapat mencari modul seperti ini:

Pengenalan npm - manajer paket untuk Node.JS

  1. buat file deskripsi paket (package.json) yang berisi informasi tentang modul (nama, versi, dll.). Baik secara manual atau melalui perintah
    npm init
    (akan menanyakan informasi yang diperlukan)
  2. Untuk menerbitkan modul, Anda perlu:
    1. Tambahkan pengguna menggunakan perintah npm adduser (Anda harus memasukkan Nama Pengguna dan Kata Sandi). Sekarang semua pekerjaan dengan npm akan dilakukan atas nama pengguna ini. Pengguna dapat masuk ke https://www.npmjs.com/~name_user dan memantau modul mereka.
    2. Penerbitan: npm terbitkan
  3. Kemudian seseorang dapat menggunakan modul Anda yang ditambahkan ke database, dan pengguna sendiri dapat membuat perubahan.
  4. Dapatkan semua perintah npm menggunakan perintah bantuan npm
  5. Cari modul di database: kata kunci npm s atau kata kunci pencarian npm (misalnya, modul super npm s)
  6. Instal modul: npm install name_module atau npm i name_module
  7. Saat memasang modul, nodejs pertama-tama mencari folder node_modules di direktori saat ini (lalu lebih tinggi dan lebih tinggi, dll.), atau (jika node_modules tidak ada) mencari package.json (juga naik; package.json biasanya menunjukkan akar dari proyek) dan, oleh karena itu, jika ia menemukan package.json, ia akan membuat folder node_modules di direktori yang sesuai; jika kedua opsi gagal, maka nodejs membuat folder node_modules di direktori saat ini. Jika Anda ingin menempatkan modul di direktori tertentu, maka Anda perlu membuat folder node_modules di direktori tersebut.
  8. modul pembaruan npm up (akan memeriksa modul pembaruan yang ada di folder node_modules)
  9. npm hapus module_name (hapus modul)

Keluaran dari npm:

npm init
nmp pengguna tambahan
npm terbitkan
kata kunci pencarian npm
modul instalasi npm
modul pembaruan npm
npm menghapus modul
perintah bantuan npm

Struktur Paket NPM

Menginstal versi yang diperlukan, misalnya: npm i [dilindungi email]

Modul versi terbaru dapat diperoleh jika modul dikembangkan menggunakan sistem versioning git, misalnya pada github. Cukup dengan mendapatkan Git Read-Only (url): https://github.com/strongloop/express.git dan di konsol:

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

dependensi di package.json

dependensi menunjuk ke modul-modul yang menjadi sandaran modul ini.

ketergantungan dev

Modul yang terdaftar di devDependencies tidak diinstal jika modul ditarik sebagai dependensi. Mereka diinstal hanya untuk pengembangan dan dapat diinstal jika, misalnya, Anda membuka modul di folder node_modules dan memasukkan npm i (atau dengan menyetel flag konfigurasi npm).

bidang utama menentukan titik masuk ke dalam paket

Modul global

Modul apa pun dapat diinstal secara global jika Anda menyetel flag -g: modul npm -g

Global berarti ke direktori sistem.

Direktori modul global untuk windows:

C:\pengguna\Nama_Pengguna\AppData\Roaming\npm

Modul global ditempatkan di direktori sistem standar. Biner-biner yang ada di package.json akan diinstal pada jalur sistem (ini adalah kegunaan utama modul global), yang nantinya dapat dipanggil melalui konsol.

Berdasarkan materi mata kuliah I. Kantor

​Hai teman-teman, dalam artikel hari ini saya ingin berbicara tentang variabel global di Node. Artikel ini ditujukan untuk pengembang yang berada pada tingkat keterampilan pemula hingga menengah yang bekerja dengan Node perlu khawatir. Artikel ini akan membantu Anda dalam waktu singkat dengan semua yang perlu Anda ketahui tentang variabel global.

Apa itu Variabel Global?

Variabel global sangat mirip, bahkan identik, dengan variabel reguler. Variabel global dapat diinisialisasi dengan suatu nilai, nilai tersebut dapat diubah, dan bahkan dapat dihapus seperti variabel biasa. Perbedaan antara variabel reguler dan variabel global terletak pada cakupannya. Saat Anda membuat variabel dalam file JavaScript, variabel tersebut hanya ada dalam cakupan yang dideklarasikannya. Sekarang apa yang saya maksud dengan ini? Pada kode di bawah ini, Anda dapat melihat contoh dua variabel berbeda dengan cakupan berbeda.

// Scope.js let fileScope = "Dapat diakses dimana saja di dalam file"; function doSomething() ( let localScope = "Hanya dapat diakses di dalam fungsi ini"; fileScope = "Dapat diakses di fungsi juga!"; ) // Ini akan menghasilkan kesalahan karena variabel tidak ada // di luar fungsi. localScope = "Coba ubah saya di sini";

Pada cuplikan kode di atas, kita dapat melihat ada dua variabel, fileScope dan localScope . Variabel fileScope dapat diubah atau dipanggil dari mana saja dalam file ini, sedangkan variabel localScope hanya ada di dalam fungsi doSomething() . Saya yakin saat ini Anda bertanya-tanya apa hubungannya dengan variabel global. Ketika kita berbicara tentang variabel global, variabel tersebut ada untuk semua file dalam suatu program yang berarti variabel tersebut memiliki cakupan global untuk program tersebut.

Alasan mengapa hal ini mungkin terjadi adalah karena program JavaScript berbagi namespace global di antara semua file dalam program tersebut. Dengan kata lain, bayangkan program Anda adalah file atau wadah raksasa yang telah "mengimpor" semua file JavaScript lainnya. Anda kemudian mendeklarasikan variabel dalam file kontainer besar ini, variabel tersebut sekarang memiliki cakupan di seluruh program. Jika Anda tidak yakin apa itu namespace atau ingin mengetahui lebih lanjut tentangnya, lihat artikel ini untuk mempelajari lebih lanjut.

Cara Mendeklarasikan dan Menggunakan Variabel Global

Sekarang kita sudah mempunyai pemahaman yang lebih baik tentang apa itu variabel global di Node, mari kita bicara tentang bagaimana sebenarnya kita menyiapkan dan menggunakan variabel global. Untuk menyiapkan variabel global, kita perlu membuatnya di objek global. objek global adalah apa yang memberi kita cakupan keseluruhan proyek, bukan hanya file (modul) tempat variabel dibuat. Pada blok kode di bawah ini, kita membuat variabel global bernama globalString dan kita memberinya nilai Selanjutnya, kita ubah nilai globalString , dan akhirnya kita setel ke tidak terdefinisi.

// Global.js global.globalString = "Ini dapat diakses dimana saja!"; konsol.log(globalString); // Output: "Ini dapat diakses dimana saja!" globalString = "Periksa saya sekarang"; konsol.log(globalString); // Keluaran: "Periksa saya sekarang" globalString = tidak terdefinisi; konsol.log(globalString); // Keluaran: tidak terdefinisi // Contoh.js // Kita bisa menggunakan global yang kita buat di Global.js di file ini // juga. konsol.log(globalString); // Output: undefinisi globalString = “Kita juga bisa mengubahnya!”; console.log(globalString);

Apa yang belum saya bicarakan adalah cara lain untuk membuat variabel menjadi global. Alasan saya mengecualikan ini adalah karena ini bukan cara yang tepat untuk menyiapkan variabel. Jika Anda mendeklarasikan variabel dalam file tanpa menggunakan kata kunci var dan kemudian memberikan nilai padanya, objek global akan menetapkan properti untuk variabel ini. Proses ini pada dasarnya mengubahnya menjadi variabel yang dapat diakses secara global. Saya sangat menyarankan untuk tidak menggunakan metode ini karena ini bukan cara yang tepat untuk membuat global. Penting juga untuk dicatat bahwa jika Anda menyetel direktif "use strict", Node akan menonaktifkan global implisit dan kemungkinan besar Anda akan mendapatkan kesalahan saat runtime daripada skrip yang berfungsi.

Kasus Penggunaan Praktis untuk Variabel Global

Sekarang, Anda mungkin berpikir bahwa Anda ingin memulai dan membuat variabel global sekarang setelah Anda mengetahui lebih banyak tentang variabel tersebut. Saya akan sangat berhati-hati dalam membuat variabel global karena beberapa alasan yang sangat penting.

Alasan pertama adalah ketika Anda membuat variabel global, variabel tersebut ada sepanjang masa aplikasi. Jika suatu variabel tetap ada sepanjang masa aplikasi, itu berarti variabel tersebut ada di sana, di memori, dan menggunakan sumber daya saat aplikasi sedang berjalan.

Kedua, penggunaan variabel global secara tradisional dapat menyebabkan masalah konkurensi. Jika beberapa thread dapat mengakses variabel yang sama dan tidak ada pengubah akses atau pengaman kegagalan, hal ini dapat menyebabkan beberapa masalah serius karena dua thread mencoba mengakses dan menggunakan variabel yang sama. Namun, meskipun hal ini berlaku dalam bahasa lain, hal ini belum tentu berlaku untuk Node.js karena ini hanya merupakan lingkungan thread tunggal. Sementara itu adalah mungkin untuk mengelompokkan proses Node, tidak ada cara asli untuk berkomunikasi di antara mereka.

Alasan terakhir yang akan saya bicarakan adalah bahwa penggunaan global dapat menyebabkan penggabungan implisit antara file atau variabel. Penggabungan bukanlah hal yang baik dalam hal menulis kode yang bagus. Saat menulis kode, kami ingin memastikan bahwa kode tersebut bersifat modular dan dapat digunakan kembali, sekaligus memastikan kode tersebut mudah digunakan dan dipahami. Menggabungkan potongan-potongan kode Anda bersama-sama dapat menyebabkan beberapa masalah besar saat Anda mencoba men-debug mengapa ada sesuatu yang tidak berfungsi.

Jika Anda ingin tahu lebih banyak tentang mengapa global tidak disarankan, Anda dapat membaca artikel bagus berjudul Variabel Global Itu Buruk.

Jika Anda merasa bingung dengan tujuan dari variabel global, jangan takut. Kita akan melihat beberapa variabel global yang dibangun di Node dan mencoba untuk mendapatkan pemahaman yang lebih baik tentang mengapa variabel tersebut bersifat global dan bagaimana variabel tersebut digunakan. Faktanya, Anda mungkin sudah menggunakan beberapa di antaranya tanpa menyadari bahwa itu adalah objek global!

// Node Globals console.log("Halo Dunia!"); proses.env.PORT = 3000; setInterval(( console.log("2 detik berlalu."); 2000);

Jika Anda melihat blok kode di atas, Anda mungkin akan melihat setidaknya satu contoh yang pernah Anda gunakan sebelumnya, console.log() . Menurut dokumentasi Node, objek konsol bersifat global yang memiliki beberapa metode yang memungkinkan pengembang melakukan hal-hal seperti mencetak log atau kesalahan. Menggali lebih dalam dokumen kita dapat melihat bahwa konsol sebenarnya merupakan instance global yang dikonfigurasi untuk menulis ke process.stdout dan process.stderr .

Ini membawa kita ke pernyataan berikutnya yang Anda lihat pada blok kode di atas, objek proses. Jika Anda telah menyiapkan versi produksi aplikasi Node, kemungkinan besar Anda harus mengatur port untuk variabel lingkungan. Variabel lingkungan env adalah bagian dari objek proses yang bersifat global lainnya. Anda dapat mengakses variabel pada objek proses di file mana pun di proyek Anda karena bersifat global. Jika objek ini tidak bersifat global, objek konsol juga tidak akan dapat diakses dari file apa pun, ingat bahwa objek tersebut sebenarnya adalah objek yang merujuk kembali ke objek proses.

setInterval adalah fungsi lain yang mungkin pernah Anda lihat sebelumnya jika Anda memiliki alasan untuk menunda operasi sebelum menjalankannya. setTimeout dan setImmediate sifatnya mirip dengan setInterval dan keduanya juga merupakan fungsi global. Ketiga fungsi ini adalah bagian dari modul pengatur waktu yang menampilkan API global yang memungkinkan Anda memanggil fungsi-fungsi ini tanpa memerlukan pengatur waktu di file Anda secara eksplisit.

​Semua kasus penggunaan yang disebutkan di atas dibangun di dalam Node dan bersifat global karena suatu alasan. Objek proses bersifat global karena memberikan informasi tentang proses Node yang sedang berjalan dan oleh karena itu harus tersedia dari file apa pun tanpa harus memerlukannya. Hal yang sama berlaku untuk modul pengatur waktu yang berisi sejumlah fungsi penting dan harus dapat diakses di mana saja tanpa harus memerlukannya. Jika Anda ingin mempelajari lebih lanjut tentang objek global yang ada di dalam Node, saya mendorong Anda untuk mengunjungi dokumentasi resmi di Globals.

Pelajari Lebih Lanjut

Ingin mempelajari lebih lanjut tentang dasar-dasar Node.js? Secara pribadi, saya akan merekomendasikan kursus online, seperti Wes Bos "Belajar Node.js karena videonya lebih mudah diikuti dan Anda benar-benar bisa membuat aplikasi dunia nyata.

Kesimpulan

Saya tahu itu cukup banyak informasinya, jadi terima kasih telah memberikannya. Semua informasi di atas terdapat pada dokumentasi di website Node. Silakan bertanya dan memberikan komentar di kolom komentar di bawah.

JavaScript memiliki objek khusus yang disebut Objek Global, objek tersebut dan semua atributnya dapat diakses di mana saja dalam program, yaitu variabel global.

Browser JavaScript biasanya berupa objek jendela global, objek global Node.js adalah objek global, semua variabel global (kecuali diri global) dimiliki oleh objek global.

Di Node.js kita memiliki akses langsung ke properti global, tanpa harus memasukkannya ke dalam aplikasi.

Objek global dan variabel global

Peran global yang paling mendasar adalah sebagai variabel host global. Berdasarkan definisi ECMAScript, kondisi berikut adalah variabel global:

  • Variabel Eksternal didefinisikan;
  • Properti objek global;
  • Variabel didefinisikan secara implisit (penugasan langsung ke variabel yang tidak ditentukan).

Saat Anda mendefinisikan variabel global, variabel tersebut juga akan menjadi properti objek global, dan sebaliknya. Perhatikan bahwa, di Node.js, Anda tidak dapat mendefinisikan variabel dalam konteks eksternal, karena semua kode pengguna adalah bagian dari modul saat ini, dan modul itu sendiri bukan merupakan konteks eksternal.

Catatan: selalu gunakan var untuk mendefinisikan variabel untuk menghindari pengenalan variabel global, karena variabel global akan mencemari namespace, meningkatkan risiko kode komunikasi.

__nama file

__namafile menentukan nama file skrip yang sedang berjalan. Jalur absolut ke lokasi di mana file keluaran akan berada, tetapi opsi baris perintah dan tentukan nama file belum tentu sama. Jika dalam sebuah modul, nilai yang dikembalikan adalah jalur ke file modul.

contoh

// 输出全局变量 __namafile ke console.log(__namafile);

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

__namadir

__dirname mewakili direktori skrip yang saat ini berada.

contoh

Buat file main.js, kodenya seperti ini:

// __dirname ke console.log(__dirname);

File main.js yang dapat dieksekusi, kodenya terlihat seperti ini:

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

setTimeout(CB, ms)

setWaktu habis(C - Bi, Bu): Fungsi SetTimeout() ditentukan hanya sekali.

Ini mengembalikan nilai pegangan yang mewakili pengatur waktu.

contoh

Buat file main.js, kodenya seperti ini:

Fungsi printHello())( console.log("Halo, Dunia!"); ) // setTimeout(printHello, 2000);

File main.js yang dapat dieksekusi, kodenya terlihat seperti ini:

$ node main.js Halo Dunia!

batas waktu habis(t)

clearTimeout(t) digunakan untuk menghentikan fungsi global sebelum meneruskan setTimeout() untuk membuat pengatur waktu. Parameter T fungsi setTimeout() untuk membuat kalkulator.

contoh

Buat file main.js, kodenya seperti ini:

Fungsi printHello())( console.log("Halo, Dunia!"); ) // var t = setTimeout(printHello, 2000); // 清除定时器 clearTimeout(t);

File main.js yang dapat dieksekusi, kodenya terlihat seperti ini:

$nodemain.js

setInterval(CB, ms)

setInterval(C - Bi, Bu) Fungsi global menjalankan fungsi yang ditentukan setelah jumlah milidetik (ms) Nomor (CB) tertentu.

Ini mengembalikan nilai pegangan yang mewakili pengatur waktu. Anda dapat menggunakan fungsinya clearInterval(T) untuk menghapus pengatur waktu.

Metode setInterval() akan terus memanggil fungsi tersebut hingga clearInterval() dipanggil atau jendela ditutup.

contoh

Buat file main.js, kodenya seperti ini:

Fungsi printHello())( console.log("Halo, Dunia!"); ) // setInterval(printHello, 2000);

File main.js yang dapat dieksekusi, kodenya terlihat seperti ini:

$ node main.js Halo Dunia! Halo Dunia! Halo Dunia! Halo Dunia! Halo Dunia! ......

Program di atas akan menampilkan "Halo, Dunia!" setiap dua detik sekali, dan akan terus dijalankan hingga tombol ditekan CTRL + C.

menghibur

Konsol Konsol untuk menyediakan keluaran standar, yang merupakan fasilitas debugging yang disediakan oleh mesin JScript di Internet Explorer, dan kemudian menjadi standar browser de facto.

Node.js mengikuti standar ini, memastikan perilaku dan kebiasaan yang konsisten dari objek konsol yang digunakan dalam karakter keluaran aliran keluaran standar (STDOUT) atau aliran kesalahan standar (STDERR).

metode konsol

Di bawah ini adalah objek konsol:

TIDAK.Metode dan deskripsi
1 konsol.log([data] [, ... ])
Untuk karakter standar aliran keluaran yang dapat dicetak dan diakhiri dengan karakter baris baru. Metode ini menerima beberapa parameter, jika hanya ada satu parameter, maka keluarannya berupa string dari parameter tersebut. Jika ada beberapa argumen, tempatkan seperti format keluaran perintah di C E().
2 konsol.info([data] [, ... ])
Peran perintah mengembalikan pesan informasi, perintah console.log tidak membuat banyak perbedaan, selain chrome, hanya teks yang akan ditampilkan, sisanya akan menampilkan tanda seru berwarna biru.
3 konsol.kesalahan([data] [, ... ])
Pesan kesalahan keluaran. Konsol akan menampilkan warna merah ketika terjadi kesalahan fork.
4 konsol.peringatkan([data] [, ... ])
Pesan peringatan ditampilkan. Konsol ditampilkan dengan tanda seru berwarna kuning.
5 console.dir(OBJ[, opsi])
Objek yang digunakan untuk pemeriksaan (inspection) dan tampilan serta format cetaknya mudah dibaca.
6 console.time (pintasan)
Keluaran waktu, waktu mulai.
7 console.timeEnd(pintasan)
Akhir zaman, yang menandakan berakhirnya zaman.
8 console.trace(pesan [, ...])
Kode saat ini mengimplementasikan jalur panggilan di tumpukan, menjalankan fungsi pengujian ini berguna, hanya ingin menguji fungsi yang dilampirkan console.trace di telepon.
9 console.assert(nilai[, pesan][, ...])
Untuk menentukan apakah suatu variabel atau ekspresi benar, diperlukan dua parameter, parameter pertama adalah ekspresi dan argumen kedua adalah string. Hanya jika argumen pertama salah, maka outputnya adalah argumen kedua;
console.log(): Cetak ke keluaran standar dan diakhiri dengan baris baru.

console.log menerima beberapa parameter, jika hanya ada satu parameter, string keluaran dari parameter tersebut. Jika ada beberapa argumen, tempatkan seperti format keluaran perintah bahasa C (E()).

Parameter pertama adalah string, tanpa parameter, cukup cetak karakter baris baru.

Console.log("Halo dunia"); console.log("byvoid%diovyb"); console.log("byvoid%diovyb", 1991);

Halo dunia, byvoid%diovyb byvoid1991iovyb

  • console.error(): Dengan console.log() ia melakukan hal yang sama, tetapi menghasilkan kesalahan standar.
  • console.trace(): Mengalirkan kesalahan ke keluaran standar tumpukan panggilan saat ini.
konsol.jejak();

Hasil pengoperasian sebagai berikut:

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

contoh

Buat file main.js, kodenya seperti ini:

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

File main.js yang dapat dieksekusi, kodenya terlihat seperti ini:

$ node main.js Jangka waktu: 10 menit: 0 ms dan seterusnya

proses

Proses adalah variabel global, atribut adalah objek global.

Ini digunakan untuk menggambarkan status proses objek Node.js saat ini dan menyediakan antarmuka sederhana ke sistem operasi. Biasanya Anda menulis program baris perintah Anda sendiri dan akhirnya menanganinya. Di bawah ini akan diperkenalkan beberapa metode proses penolakan yang paling umum digunakan oleh anggota.

TIDAK.Acara dan deskripsi
1 KELUAR
Diaktifkan saat proses siap dihentikan.
2 sebelum keluar
Peristiwa ini dipicu ketika simpul memiliki perulangan peristiwa kosong dan tidak ada tindakan lain. Secara umum, tidak ada proses untuk mengatur node keluar, tetapi pendengar "beforeExit" dapat dipanggil secara asinkron sehingga node tersebut akan melanjutkan.
3 pengecualian yang tidak tertangkap
Ketika pengecualian dimasukkan kembali ke dalam loop acara, naikkan acara ini. Jika Anda menambahkan monitor ke pengecualian, tindakan default (pencetakan tumpukan dan keluar) tidak akan terjadi.
4 Sinyal dipicu ketika
peristiwa ketika proses menerima sinyal.
Tinjau daftar nama sinyal POSIX standar seperti SIGINT, SIGUSR1, dan seterusnya.

contoh

Buat file main.js, kodenya seperti ini:

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

File main.js yang dapat dieksekusi, kodenya terlihat seperti ini:

$ node main.js tingkat pengembalian: 0

Kode Status Keluaran

Kode status keluar adalah sebagai berikut:

Kode statusJudul dan deskripsi
1 Pengecualian Fatal yang Tidak Tertangkap
Ada pengecualian yang tidak tertangkap dan tidak ditangani atau domain dari pengendali uncaughtException.
2 tidak terpakai
penyimpanan
3 Analisis Kesalahan Internal JavaScript
Kode sumber penguraian kesalahan JavaScript dipanggil ketika proses Node dimulai. Sangat jarang, hanya ketika Node.js
4 Skor kesalahan JavaScript internal
Proses JavaScript yang menjalankan node sumber mengembalikan kegagalan saat mengevaluasi fungsi. Sangat jarang, hanya ketika Node.js
5 Kesalahan fatal
V8 dalam kesalahan yang tidak dapat diperbaiki dengan akibat yang fatal. Biasanya print Stderr, isinya: kesalahan fatal
6 Penangan Pengecualian Internal Non-Fungsi
Pengecualian yang tidak tertangkap, pengendali pengecualian di dalamnya entah bagaimana disetel ke fungsi, dan juga tidak dapat dipanggil.
7 Kegagalan Pengecualian Pengendali Waktu Proses Internal
Pengecualian yang tidak tertangkap, dan penangan pengecualian yang menanganinya sendiri akan mengeluarkan pengecualian. Misalnya, jika process.on("uncaughtException") atau domain.on("error") memunculkan pengecualian.
8 tidak terpakai
penyimpanan
9 Argumen tidak valid
Ini mungkin parameter yang tidak diketahui atau parameter yang akan dinilai.
10 Waktu Proses JavaScript internal gagal
Kode sumber JavaScript dihasilkan ketika kesalahan dipicu dalam proses Node, sangat jarang, hanya ketika sedang dalam pengembangan Node.
12 Argumen Debug Tidak Valid
Kumpulan opsi --debug dan/atau --debug-BRK, tetapi memilih port yang salah.
> 128 Keluaran sinyal
Jika sebuah node menerima sinyal fatal seperti SIGKILL atau SIGHUP, maka kode yang dikembalikan adalah 128 ditambah kode sinyal. Ini adalah praktik standar Unix, kode tinggi pada sinyal keluaran.

atribut proses

Proses ini memberikan banyak properti yang berguna, kemudahan interaksi, sehingga kita dapat mengontrol sistem dengan lebih baik:

Jumlah.Properti & Deskripsi
1 STDOUT
Aliran keluaran standar.
2 STDERR
Aliran kesalahan standar.
3 STDIN
Aliran masukan standar.
4 ARGV
Properti ARGV mengembalikan serangkaian opsi berbeda untuk mengeksekusi skrip baris perintah saat menulis. Anggota pertamanya selalu berupa node, anggota kedua adalah nama file skrip, dan anggota sisanya adalah parameter file skrip.
5 jalur eksekutif
Mengembalikan jalur absolut dari node biner eksekusi skrip saat ini.
6 eksekutifArgv
Mengembalikan anggota array yang terletak di bawah skrip baris perintah yang dieksekusi di antara parameter baris perintah node yang dapat dieksekusi dari file skrip.
7 ENV
Mengembalikan objek, anggota variabel lingkungan shell saat ini
8 Kode Keluar
Kode keluar untuk proses, jika proses disajikan dengan proses.exit() keluar, tanpa menentukan kode keluar.
9 versi
versi simpul, seperti v0.10.18.
10 versi
Properti yang berisi versi node dan dependensi.
11 konfigurasi
Objek yang berisi node saat ini digunakan untuk mengkompilasi file konfigurasi opsi javascript yang dapat dieksekusi. Ini adalah skrip run./configure yang sama yang dibuat oleh file "config.gypi".
12 PID - pengatur
Nomor proses saat ini.
13 Nama
Nama proses, "simpul" default, Anda dapat menyesuaikan nilainya.
14 lengkungan
Arsitektur CPU saat ini: "arm", "ia32" atau "64".
15 platform
Jalankan program yang platformnya adalah "Darwin", "FreeBSD", "Linux", "SunOS" atau "win32"
16 modul utama
memerlukan metode alternatif utama. Beberapa hal, jika modul utama berubah saat runtime, require.main mungkin terus kembali ke modul lama. Keduanya dianggap milik modul yang sama.

contoh

Buat file main.js, kodenya seperti ini:

// 输出到终端 process.stdout.write("Halo Dunia!" + "\n"); // 通过参数读取 process.argv.forEach(fungsi(val, indeks, array) ( console.log(index + ": " + val); )); // menjalankan console.log(process.execPath); // 平台信息 console.log(proses.platform);

File main.js yang dapat dieksekusi, kodenya terlihat seperti ini:

$ simpul main.js Halo Dunia! 0: simpul 1: /web/www/node/main.js /usr/local/node/0.10.36/bin/node darwin

Panduan Referensi Metode

Proses ini menyediakan banyak metode berguna untuk memfasilitasi kontrol sistem interaktif kami yang lebih efisien:

TIDAK.Metode dan deskripsi
1 menggugurkan()
Ini akan memunculkan peristiwa pemicu simpul interupsi. Ini akan menyebabkan node keluar dan membuat file dump.
2 ChDir (direktori)
Ubah direktori kerja proses saat ini jika operasi tidak dapat dihentikan.
3 TELINGA ()
Mengembalikan direktori kerja dari proses saat ini
4 keluar([kode])
Mengakhiri proses dengan kode yang ditentukan. Jika parameter ini dihilangkan, maka akan menggunakan kode 0.
5 gelisah()
Dapatkan identifikasi grup proses (lihat getgid(2)). Ketika sebuah grup dibeli ID digital, bukan nama.
6 setgid(ID)
Menyiapkan proses identifikasi kelompok (lihat setgid (2)). ID dapat mengambil nama numerik atau grup. Jika Anda menentukan nama grup, pemblokiran akan diizinkan menunggu ID digital.
Catatan: Fungsi ini hanya dapat digunakan (misalnya non-Windows dan Android) pada platform POSIX.
7 dapatkan()
Dapatkan proses identifikasi pengguna (lihat getuid(2)). Ini adalah ID pengguna numerik, bukan nama pengguna.
Catatan: Fungsi ini hanya dapat digunakan (misalnya non-Windows dan Android) pada platform POSIX.
8 UIP (ID)
Proses setup ID pengguna (lihat UIP (2)). Mengambil pengidentifikasi digital atau string nama. Jika Anda menentukan nama grup, pemblokiran akan diizinkan menunggu ID digital.
Catatan: Fungsi ini hanya dapat digunakan (misalnya non-Windows dan Android) pada platform POSIX.
9 dapatkan grup()
Proses mengembalikan array ID grup. Sistem POSIX tidak menjamin hal tersebut, namun Node.js dijamin ada.
Catatan: Fungsi ini hanya dapat digunakan (misalnya non-Windows dan Android) pada platform POSIX.
10 setgroup
Tetapkan ID grup proses. Ini memenuhi syarat untuk berfungsi, yang Anda perlukan hanyalah memiliki hak pengguna super, atau memiliki kemampuan CAP_SETGID.
Catatan: Fungsi ini hanya dapat digunakan (misalnya non-Windows dan Android) pada platform POSIX.
11 grup init(pengguna, grup_ekstra)
Membaca / dll. /group, dan menginisialisasi daftar akses grup, semua anggota grup berada. Ini memenuhi syarat untuk berfungsi, yang Anda perlukan hanyalah memiliki hak pengguna super, atau memiliki kemampuan CAP_SETGID.
Catatan: Fungsi ini hanya dapat digunakan (misalnya non-Windows dan Android) pada platform POSIX.
12 bunuh (IDP [sinyal])
Mengirim sinyal ke suatu proses. ID adalah pengidentifikasi proses, dan sinyal adalah string yang menunjukkan sinyal yang sedang dikirim. Nama sinyal berupa string seperti "SIGINT" atau "" SIGHUP. Jika parameter ini dihilangkan, sinyalnya akan menjadi "SIGTERM".
13 Penggunaan Memori()
Ia mengembalikan objek yang menjelaskan proses yang digunakan oleh byte status memori node.
14 berikutnyaTick (panggilan balik)
Setelah loop acara panggilan balik fungsi saat ini berakhir.
15 Umask ([topeng])
Setel atau baca file masker proses. Proses anak mewarisi topeng ini dari proses induk. Jika argumen mask benar, maka ia mengembalikan topeng lama. Jika tidak, ia akan mengembalikan topeng saat ini.
16 Dihabiskan()
Mengembalikan jumlah detik Node sudah dimulai.
17 jam kerja()
Resolusi waktu dari proses saat ini, ditentukan sebagai array nanodetik [detik]. Hal ini relatif terhadap peristiwa masa lalu. Nilai ini tidak ada hubungannya dengan tanggal, sehingga tidak mempengaruhi penyimpangan jam. Tujuan utamanya adalah mengukur kinerja program dalam jangka waktu yang tepat.
Sebelum hasilnya dapat diteruskan ke proses saat ini.hrtime(), hasilnya akan mengembalikan perbedaan waktu di antara keduanya, untuk referensi dan pengukuran interval waktu.

contoh

Buat file main.js, kodenya seperti ini:

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

Dalam sebuah node, Anda dapat mengatur variabel global menggunakan objek "global" atau "GLOBAL":

GLOBAL._ = memerlukan("garis bawah"); // tapi kamu "tidak boleh" melakukan ini! (lihat catatan di bawah)

atau lebih bermanfaat...

GLOBAL.jendela = GLOBAL; // seperti di browser

Dari simpulnya, Anda dapat melihat bahwa keduanya dijahit menjadi satu:

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

Dalam kode di atas, "ini" adalah konteks global. Dengan modul commonJS (yang digunakan node), "objek" di dalam modul ini (yaitu "kode Anda") BUKAN konteks global. Sebagai buktinya, lihat di bawah ini di mana saya memuntahkan objek "ini" dan kemudian objek "GLOBAL" raksasa.

Console.log("\nINI:"); konsol.log(ini); console.log("\nGLOBAL:"); konsol.log(global); /* keluaran ... INI: {} 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: , proses: ( EventEmitter: , judul: "node", tegaskan: , versi: "v0.6.5", _tickCallback: , moduleLoadList: [ "Binding evals", "Binding natives", "NativeModule events", "NativeModule buffer", "Binding buffer", "NativeModule menegaskan", "NativeModule util", "NativeModule path", "NativeModule module", " NativeModule fs", "Binding fs", "Konstanta pengikatan", "NativeModule stream", "NativeModule console", "Binding tty_wrap", "NativeModule tty", "NativeModule net", "NativeModule timer", "Binding timer_wrap", " NativeModule _linklist" ], versi: ( 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", JANGKA: "xterm", SHELL: "/bin/bash" , TMPDIR: "/var/folders/2h/2hQmtmXlFT4yVGtr5DBpdl9LAiQ/-Tmp-/", Apple_PubSub_Socket_Render: "/tmp/launch-9Ga0PT/Render", PENGGUNA: "ddopson", COMMAND_MODE: "unix2003", SSH_AUTH_SOCK: "/tmp/ peluncuran -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", BERANDA : "/Users/ddopson", ITERM_SESSION_ID: "w0t0p0", LOGNAME: "ddopson", DISPLAY: "/tmp/launch-l9RQXI/org.x:0", OLDPWD: "/workspace/zd/zgap/darwin- js /eksternal", _: "./index.js"), openStdin: , keluar: , pid: 10321, fitur: ( debug: false, uv: true, ipv6: true, tls_npn: false, tls_sni: true, tls : benar ), bunuh: , execPath: "/usr/local/bin/node", addListener: , _needTickCallback: , pada: , hapusListener: , benar-benarKeluar: , chdir: , debug: , kesalahan: , cwd: , watchFile: , umask :, getuid:, unwatchFile:, mixin:, setuid:, setgid:, createChildProcess:, getgid:, mewarisi:, _kill:, _byteLength:, mainModule: ( id: ". ", ekspor: (), induk: null, nama file:"/workspace/zd/zgap/darwin-js/index.js", dimuat: false, keluar: false, anak-anak:, jalur: ), _debugProcess: , dlopen: , uptime: , memoryUsage: , uvCounters: , binding: ), GLOBAL: , root: , Buffer: ( poolSize: 8192, isBuffer: , byteLength: , _charsWritten: 8 ), setTimeout: , setInterval: , clearTimeout: , clearInterval: , konsol: , jendela: , navigator: () ) */

**Catatan: Mengenai pengaturan "GLOBAL._", secara umum Anda sebaiknya melakukan var _ = require("underscore"); . Ya, Anda melakukan ini di setiap file yang menggunakan garis bawah, seperti di Java Anda melakukan import com.foo.bar; . Hal ini mempermudah untuk menentukan apa yang dilakukan kode Anda karena tautan antar file bersifat "eksplisit". Agak mengganggu, tapi bagus. Ini adalah khotbah.

Ada pengecualian untuk setiap aturan. Saya memiliki satu contoh di mana saya perlu menyetel "GLOBAL._". Saya sedang membuat sistem untuk mendefinisikan file "config" yang sebagian besar berupa JSON, tetapi "ditulis dalam JS" untuk menambah sedikit fleksibilitas. Tidak ada pernyataan "wajib" dalam file konfigurasi tersebut, tetapi saya ingin mereka memiliki akses ke garis bawah (seluruh sistem didasarkan pada pola garis bawah dan garis bawah), jadi saya akan menetapkan "GLOBAL._" sebelum mengevaluasi "config". Jadi ya, untuk setiap aturan ada pengecualian di suatu tempat. Tapi kamu punya alasan yang bagus, bukan sekedar "Aku capek mengetik" jadi aku ingin mengingkari perjanjian."