Panduan Node.js, Bagian 3: Hosting, REPL, Operasi Konsol, Modul

Ini adalah bagian ketiga dari terjemahan manual Node.js. Hari ini kita akan berbicara tentang memilih hosting untuk proyek Node.js, bagaimana bekerja dengan Node.js dalam mode REPL dan bagaimana menjalankan skrip dengan argumen, cara berinteraksi dengan konsol dan modul.




Hosting untuk Aplikasi Node.js


Pilihan hosting untuk aplikasi Node.js tergantung pada kebutuhan Anda. Berikut adalah daftar singkat opsi hosting yang dapat Anda jelajahi dengan memutuskan untuk menggunakan aplikasi Anda dan membuatnya tersedia untuk umum. Pertama, pertimbangkan opsi sederhana, yang kemampuannya terbatas, dan kemudian lebih kompleks, tetapi juga dengan kemampuan yang lebih serius.

Option Opsi hosting termudah: terowongan lokal


Bahkan jika alamat IP dinamis diberikan ke komputer Anda atau Anda berada di belakang NAT, Anda dapat menggunakan aplikasi Anda di atasnya dan melayani permintaan pengguna untuk itu menggunakan terowongan lokal.

Opsi ini cocok untuk pengorganisasian pengujian dengan cepat, untuk mengatur demonstrasi produk, atau untuk memberikan akses ke aplikasi ke sekelompok orang yang sangat kecil.

Ada layanan yang sangat baik untuk mengatur terowongan lokal, ngrok , tersedia untuk banyak platform.

Menggunakan ngrok, itu sudah cukup untuk menjalankan perintah dari bentuk ngrok PORT dan port yang Anda tentukan akan dapat diakses dari Internet. Pada saat yang sama, jika Anda menggunakan versi layanan gratis, Anda akan memiliki alamat di domain ngrok.io . Jika Anda memutuskan untuk berlangganan, Anda dapat menggunakan nama domain Anda sendiri, dan di samping itu, Anda dapat meningkatkan keamanan solusi (menggunakan ngrok, Anda membuka akses ke komputer Anda di seluruh Internet).

Alat lain yang dapat digunakan untuk mengatur terowongan lokal disebut localtunnel .

▍Lingkungan untuk menyebarkan proyek Node.js yang tidak memerlukan konfigurasi


Kesalahan


Glitch adalah lingkungan dan platform interaktif untuk pengembangan aplikasi cepat yang memungkinkan Anda untuk menyebarkannya di subdomain glitch.com. Platform ini belum mendukung domain penggunanya sendiri, ada beberapa batasan saat bekerja dengannya, tetapi sangat bagus untuk mengerjakan prototipe aplikasi. Desain Glitch terlihat cukup lucu (mungkin ini dapat ditulis menjadi keunggulan platform ini), tetapi ini bukan semacam "mainan" lingkungan yang sangat terbatas. Di sini Anda memiliki kesempatan untuk bekerja dengan Node.js, CDN, repositori aman untuk informasi rahasia, kemampuan untuk bertukar data dengan GitHub dan banyak lagi.

Proyek Glitch dijalankan oleh perusahaan yang sama di belakang FogBugz dan Trello (salah satu pencipta StackOverflow). Saya sering menggunakan platform ini untuk menunjukkan aplikasi.

Codepen


Codepen adalah platform hebat di mana komunitas yang menarik telah terbentuk. Di sini Anda dapat membuat proyek yang menyertakan banyak file, dan menggunakan mereka menggunakan domain Anda sendiri.

▍ Lingkungan tanpa server


Platform tanpa server memungkinkan Anda untuk menerbitkan aplikasi tanpa sepenuhnya memikirkan server, tentang pengaturannya atau tentang pengelolaannya. Paradigma komputasi tanpa server adalah aplikasi yang mempublikasikan sebagai fungsi yang merespons panggilan ke titik akhir jaringan. Pendekatan serupa untuk penyebaran aplikasi juga disebut FAAS (Functions As A Service, Function as a Service).

Berikut adalah beberapa solusi populer di bidang ini:


Kedua proyek ini memberikan pengembang dengan tingkat abstraksi tertentu, yang memungkinkan penerbitan aplikasi pada berbagai platform FAAS, misalnya, Amazon AWS Lambda, Microsoft Azure dan Google Cloud.

▍ solusi PAAS


PAAS (Platform Sebagai Layanan, Platform sebagai Layanan) adalah platform yang menangani banyak hal yang, dalam keadaan normal, harus diurus oleh pengembang yang menyebarkan aplikasi.

Zeit Sekarang


Zeit adalah opsi yang menarik untuk menggunakan aplikasi. Penempatan, menggunakan platform ini, bermuara untuk memasukkan perintah now di terminal. Ada Zeit versi gratis, ada beberapa batasan saat bekerja dengannya. Ada juga versi berbayar yang lebih kuat dari platform ini. Menggunakan Zeit, Anda tidak bisa memikirkan fakta bahwa aplikasi Anda memerlukan server. Anda cukup menggunakan aplikasi, dan semua lainnya dikelola oleh platform ini.

Nanobox


Pencipta platform Nanobox , yang mencakup penyebaran aplikasi Node.js, menyebutnya PAAS V2.

Heroku


Heroku adalah platform hebat lainnya untuk hosting aplikasi Node.js. Berikut ini adalah artikel yang bagus tentang cara bekerja dengannya.

Microsoft biru


Azure adalah platform cloud dari Microsoft. Dokumentasinya memiliki bagian tentang aplikasi Node.js.

Google Cloud Platform


Google Cloud adalah lingkungan yang hebat untuk menyebarkan aplikasi Node.js. Inilah bagian yang relevan dari dokumentasinya.

▍VPS hosting


Ada banyak platform yang menyediakan layanan hosting VPS . Fitur umum dari platform semacam itu adalah kenyataan bahwa pengembang memiliki server virtual, secara mandiri menginstal sistem operasi (Linux atau Windows) di dalamnya, dan secara mandiri menyebarkan aplikasi.

Di antara platform yang menyediakan layanan VPS, yang jumlahnya sangat banyak, kami dapat mencatat hal-hal berikut, yang saya gunakan dan yang dapat saya rekomendasikan kepada orang lain:


Kami sendiri, kami menambahkan bahwa RUVDS juga menyediakan layanan hosting VPS. Kami dilisensikan oleh FSTEC, pelanggan kami diasuransikan oleh AIG, kami memiliki empat pusat data di berbagai negara. Ada pusat data sendiri RUCLOUD level TIER 3 di kota Korolev, wilayah Moskow, serta zona tekanan di pusat data Deltalis (Swiss) , London Equinix LD8 (Inggris Raya) , dan MMTS-9 (Moskow, Rusia). Semua zona penahanan memenuhi tingkat keandalan setidaknya TIER 3.

Mitra perusahaan adalah FINAM JSC, grup keuangan BCS, National Settlement Depository (Moscow Exchange), VTsIOM JSC, perusahaan Gars-Telecom, operator taksi Gett, operator pengiriman Klub Pengiriman dan banyak lainnya.


Server Server normal


Solusi hosting lain adalah membeli (atau menyewa, misalnya, menggunakan layanan Vultr Bare Metal ) server biasa, menginstal Linux dan perangkat lunak lain di dalamnya, menghubungkannya ke Internet dan host aplikasi Node.js di atasnya.

Hosting adalah topik yang sangat besar, tetapi, semoga, materi dalam bagian ini memungkinkan Anda untuk memilih dengan tepat apa yang Anda butuhkan. Sekarang kita beralih ke cerita tentang bekerja dengan Node.js dalam mode REPL.

Menggunakan Node.js dalam Mode REPL


Singkatan REPL adalah singkatan dari Read-Evaluate-Print-Loop (siklus "baca - hitung - keluaran"). Menggunakan REPL adalah cara yang bagus untuk dengan cepat menjelajahi kemampuan Node.js.

Seperti yang sudah Anda ketahui, perintah node digunakan untuk menjalankan skrip di Node.js, tampilannya seperti ini:

 node script.js 

Jika Anda memasukkan perintah yang sama, tetapi tidak menentukan nama file, Node.js akan diluncurkan dalam mode REPL:

 node 

Jika Anda mencoba sekarang untuk memasukkan perintah seperti itu di terminal Anda, maka sebagai hasilnya Anda akan melihat sesuatu seperti berikut:

 > node > 

Node.js sekarang dalam mode siaga. Sistem mengharapkan kita untuk memasukkan beberapa kode JavaScript pada baris perintah yang akan dijalankannya.

Untuk memulai, mari kita coba sesuatu yang sangat sederhana:

 > console.log('test') test undefined > 

Di sini kami menyarankan Node.js untuk mengeksekusi perintah yang digunakan untuk menampilkan data ke konsol. Nilai pertama, test , adalah apa yang console.log('test') . Nilai kedua, undefined , adalah apa yang mengembalikan fungsi console.log() .

Setelah perintah selesai, prompt REPL muncul, yang berarti bahwa kita dapat memasukkan perintah baru di sini.

▍ Perintah lengkap menggunakan tombol Tab


REPL adalah lingkungan yang interaktif. Jika Anda menekan tombol Tab pada keyboard Anda saat menulis kode, REPL akan mencoba untuk secara otomatis menyelesaikan entri dengan memilih, misalnya, nama yang sesuai untuk variabel yang telah Anda deklarasikan atau nama objek standar.

▍Melayani Objek JavaScript


Masukkan nama beberapa objek JavaScript standar di baris perintah, misalnya, Number , tambahkan titik setelah itu dan tekan Tab .

REPL akan mencantumkan properti dan metode objek yang dapat berinteraksi dengan pengembang:


Meneliti Objek Angka

▍Melayani objek global


Untuk mengetahui objek Node.js global mana yang dapat Anda gunakan, masukkan perintah global. di terminal global. dan tekan Tab .


Penelitian Objek Global

▍ Variabel Khusus _


Variabel _ (garis bawah) menyimpan hasil dari operasi terakhir yang dilakukan. Variabel ini dapat digunakan sebagai bagian dari perintah yang dimasukkan ke konsol.

▍ Perintah dimulai dengan titik


Dalam mode REPL, Anda dapat menggunakan beberapa perintah khusus yang dimulai dengan titik. Inilah mereka:

  • Perintah .help menampilkan informasi referensi untuk perintah yang dimulai dengan titik.
  • Perintah .editor sistem dalam mode editor, yang membuatnya mudah untuk memasukkan kode JavaScript multi-line. Setelah berada dalam mode ini, Anda memasukkan semua yang Anda inginkan, untuk menjalankan kode, gunakan perintah Ctrl+D
  • Perintah .break memungkinkan .break untuk membatalkan input ekspresi multi-line. Penggunaannya mirip dengan penggunaan pintasan keyboard Ctrl+C
  • Perintah .clear menghapus konteks REPL dan juga memotong input ekspresi multi-line.
  • Perintah .load memuat kode dari file JavaScript ke dalam sesi saat ini.
  • Perintah .save menyimpan semua yang dimasukkan selama sesi REPL ke file.
  • Perintah .exit memungkinkan .exit untuk keluar dari sesi REPL, ia bertindak seperti dua penekanan tombol berurutan dari kombinasi tombol Ctrl+C

Perlu dicatat bahwa REPL mengakui input ekspresi multi-line bahkan tanpa menggunakan .editor .

Misalnya, kami mulai memasukkan kode iterator:

 [1, 2, 3].forEach(num => { 

Jika, setelah memasukkan kurung kurawal, tekan tombol Enter , REPL akan menuju ke baris baru, prompt di mana akan terlihat seperti tiga titik. Ini menunjukkan bahwa kita dapat memasukkan kode untuk blok yang sesuai. Ini terlihat seperti ini:

 ... console.log(num) ... }) 

Menekan Enter setelah memasukkan tanda kurung terakhir akan menjalankan ekspresi. Jika Anda memasukkan .break dalam mode ini, input akan dibatalkan dan ekspresi tidak akan dieksekusi.

Mode REPL adalah fitur berguna Node.js, tetapi cakupannya terbatas pada eksperimen kecil. Kami tertarik pada sesuatu yang lebih dari kemampuan untuk menjalankan beberapa perintah. Oleh karena itu, kami beralih ke bekerja dengan Node.js dalam mode normal. Yaitu, mari kita bicara tentang bagaimana skrip Node.js dapat mengambil argumen baris perintah.

Bekerja dengan argumen baris perintah dalam skrip Node.js


Saat menjalankan skrip Node.js, argumen dapat diteruskan ke mereka. Ini panggilan skrip biasa:

 node app.js 

Argumen yang diteruskan ke skrip dapat berupa nilai independen atau konstruk nilai kunci. Dalam kasus pertama, menjalankan skrip terlihat seperti ini:

 node app.js flavio 

Yang kedua - seperti ini:

 node app.js name=flavio 

Metode meneruskan argumen digunakan untuk menentukan bagaimana Anda bisa bekerja dengannya dalam kode skrip.

Jadi, untuk mengakses argumen baris perintah, objek process Node.js standar digunakan. Ini memiliki properti argv , yang merupakan array yang berisi, antara lain, argumen yang diteruskan ke skrip saat startup.

Elemen pertama dari array argv berisi path lengkap ke file yang dieksekusi ketika perintah node dimasukkan pada baris perintah.

Elemen kedua adalah path ke skrip executable.

Semua elemen lain dari array, mulai dari yang ketiga, berisi apa yang diteruskan ke skrip ketika dijalankan.

Enumerasi argumen yang tersedia di argv (ini termasuk path ke node dan path ke file skrip yang dapat dieksekusi) dapat diatur menggunakan forEach loop:

 process.argv.forEach((val, index) => { console.log(`${index}: ${val}`) }) 

Jika Anda tidak tertarik pada dua argumen pertama, berdasarkan argv Anda dapat membuat array baru yang akan mencakup semuanya dari argv kecuali dua elemen pertama:

 const args = process.argv.slice(2) 

Misalkan, saat menjalankan skrip, hanya satu argumen yang diteruskan ke sana, dalam bentuk nilai independen:

 node app.js flavio 

Anda dapat mengakses argumen ini seperti ini:

 const args = process.argv.slice(2) args[0] 

Sekarang mari kita coba menggunakan konstruksi tipe nilai kunci:

 node app.js name=flavio 

Dengan pendekatan ini, setelah array args terbentuk, name=flavio string name=flavio dalam args[0] . Sebelum menggunakan argumen, string ini harus diuraikan. Cara paling mudah untuk melakukan ini adalah dengan menggunakan perpustakaan minimalis , yang dirancang untuk memudahkan bekerja dengan argumen baris perintah:

 const args = require('minimist')(process.argv.slice(2)) args['name'] //flavio 

Sekarang perhatikan output ke konsol.

Mengeluarkan data ke konsol menggunakan modul konsol


Modul konsol Node.js standar memberi pengembang banyak peluang untuk berinteraksi dengan baris perintah selama eksekusi program. Secara umum, ini sama dengan objek console digunakan dalam JavaScript berbasis browser. Mungkin metode modul console paling sederhana dan paling banyak digunakan adalah console.log() , yang digunakan untuk menampilkan data string ke konsol. Selain itu, jika Anda melewatkan sebuah objek ke sana, maka itu, sebelum output, akan dikonversi ke representasi stringnya.

Metode console.log() dapat memberikan beberapa nilai:

 const x = 'x' const y = 'y' console.log(x, y) 

Setelah menjalankan urutan instruksi ini, baik nilai x dan nilai y akan sampai ke konsol.

Untuk membentuk string yang kompleks, perintah console.log() mendukung penggunaan wildcard, yang ketika mengeluarkan data, diganti dengan nilai-nilai yang sesuai dalam urutan prioritas.

Sebagai contoh, berikut adalah perintah yang menampilkan teks My cat has 2 years :

 console.log('My %s has %d years', 'cat', 2) 

Pertimbangkan fitur wildcard:

  • %s memformat nilai sebagai string.
  • %d atau %i memformat nilai sebagai bilangan bulat.
  • %f memformat nilai sebagai angka titik-mengambang.
  • %O digunakan untuk menampilkan representasi string dari objek.

Berikut adalah contoh lain menggunakan wildcard:

 console.log('%O', Number) 

▍Membersihkan konsol


Untuk menghapus konsol, gunakan perintah console.clear() (perilakunya di terminal yang berbeda dapat bervariasi).

▍ Elemen Penghitungan


Sekarang kita akan melihat metode console.count() berguna. Lihatlah kode ini:

 const x = 1 const y = 2 const z = 3 console.count( 'The value of x is ' + x + ' and has been checked .. how many times?' ) console.count( 'The value of x is ' + x + ' and has been checked .. how many times?' ) console.count( 'The value of y is ' + y + ' and has been checked .. how many times?' ) 

Metode count() menghitung jumlah output baris dan menampilkan hasilnya di sebelahnya.
Dengan menggunakan metode ini, dalam contoh berikut, Anda dapat menghitung apel dan jeruk:

 const oranges = ['orange', 'orange'] const apples = ['just one apple'] oranges.forEach(fruit => { console.count(fruit) }) apples.forEach(fruit => { console.count(fruit) }) 

▍Menampilkan hasil penelusuran tumpukan ke konsol


Kadang-kadang berguna untuk mencetak jejak tumpukan fungsi ke konsol. Misalnya, untuk menjawab pertanyaan tentang bagaimana kami sampai di tempat tertentu dalam program. Anda dapat melakukan ini dengan perintah berikut:

 console.trace() 

Berikut ini adalah contoh penggunaannya:

 const function2 = () => console.trace() const function1 = () => function2() function1() 

Inilah yang terjadi ketika saya menjalankan kode ini dalam mode REPL:

 Trace   at function2 (repl:1:33)   at function1 (repl:1:25)   at repl:1:1   at ContextifyScript.Script.runInThisContext (vm.js:44:33)   at REPLServer.defaultEval (repl.js:239:29)   at bound (domain.js:301:14)   at REPLServer.runBound [as eval] (domain.js:314:12)   at REPLServer.onLine (repl.js:440:10)   at emitOne (events.js:120:20)   at REPLServer.emit (events.js:210:7) 

▍Mengukur waktu yang dibutuhkan untuk menyelesaikan suatu tindakan


Anda dapat mengukur waktu yang dibutuhkan, misalnya, untuk menjalankan fungsi, menggunakan metode console.time() dan console.timeEnd() . Ini terlihat seperti ini:

 const doSomething = () => console.log('test') const measureDoingSomething = () => { console.time('doSomething()') //    ,     doSomething() console.timeEnd('doSomething()') } measureDoingSomething() 

▍Bekerja dengan stdout dan stderr


Seperti yang telah kita lihat, perintah console.log() sangat bagus untuk menampilkan pesan ke konsol. Saat menggunakannya, apa yang disebut stream output standar, atau stdout .

Perintah console.error() membuang data ke stream kesalahan standar, stderr . Data yang dikirim ke stderr sampai ke konsol, meskipun apa yang dihasilkan oleh aliran ini dapat, misalnya, dialihkan ke file log kesalahan.

▍Gunakan warna saat mengeluarkan data ke konsol


Untuk mewarnai teks yang ditampilkan di konsol, Anda dapat menggunakan urutan pelarian yang mengidentifikasi warna:

 console.log('\x1b[33m%s\x1b[0m', 'hi!') 

Jika Anda menjalankan perintah ini, misalnya, dalam mode REPL, teks hi akan ditampilkan dengan warna kuning.
Namun pendekatan ini tidak terlalu nyaman. Akan lebih mudah menggunakan perpustakaan khusus, misalnya, kapur tulis, untuk menampilkan teks berwarna di konsol . Perpustakaan ini, di samping pemformatan warna teks, mendukung cara lain untuk menata mereka. Misalnya, dengan bantuannya dimungkinkan untuk membuat teks dalam huruf tebal, miring atau bergaris bawah.

Untuk menginstalnya dari npm, gunakan perintah berikut:

 npm install chalk 

Anda bisa menggunakannya seperti ini:

 const chalk = require('chalk') console.log(chalk.yellow('hi!')) 

Menggunakan perintah chalk.yellow() jauh lebih nyaman daripada escape sequence, dan teks program dengan pendekatan ini jauh lebih mudah dibaca.

Untuk mempelajari lebih lanjut tentang kapur, periksa halaman perpustakaan ini di GitHub.

▍Buat bilah kemajuan


Bilah kemajuan mungkin berguna dalam situasi yang berbeda. Anda dapat menggunakan paket progres untuk membuat indikator progres berjalan di konsol. Anda dapat menginstalnya seperti ini:

 npm install progress 

Di bawah ini adalah contoh kode di mana indikator dibuat yang dapat digunakan untuk menampilkan informasi tentang tugas yang terdiri dari 10 langkah. Dalam kasus kami, dibutuhkan 100 ms untuk menyelesaikan setiap langkah. Setelah indikator penuh, perintah clearItnerval() dan program berakhir.

 const ProgressBar = require('progress') const bar = new ProgressBar(':bar', { total: 10 }) const timer = setInterval(() => { bar.tick() if (bar.complete) {   clearInterval(timer) } }, 100) 

▍Penerimaan input pengguna dari baris perintah


Bagaimana cara membuat aplikasi baris perintah yang ditulis untuk platform Node.js interaktif? Mulai dari versi 7, Node.js berisi modul readline yang memungkinkan Anda menerima data dari stream yang dapat dibaca, misalnya, dari process.stdin . Utas ini, selama eksekusi program Node.js, adalah apa yang dimasukkan di terminal. Data dimasukkan satu baris pada satu waktu.

Pertimbangkan potongan kode berikut:

 const readline = require('readline').createInterface({ input: process.stdin, output: process.stdout }) readline.question(`What's your name?`, (name) => { console.log(`Hi ${name}!`) readline.close() }) 

Di sini kami menanyakan namanya kepada pengguna, dan setelah memasukkan teks dan menekan tombol Enter pada keyboard, kami menampilkan salam.

Metode question() menampilkan apa yang diteruskan sebagai parameter pertama (yaitu, pertanyaan yang diajukan kepada pengguna) dan menunggu input untuk diisi. Setelah menekan Enter ia memanggil callback yang dilewatinya di parameter kedua dan memproses apa yang dimasukkan. Dalam panggilan balik yang sama, kami menutup antarmuka readline .

readline , , .

, , , , , , — * .

, readline-sync , , readline , .

, . inquirer . :

 npm install inquirer 

:

 const inquirer = require('inquirer') var questions = [{ type: 'input', name: 'name', message: "What's your name?", }] inquirer.prompt(questions).then(answers => { console.log(`Hi ${answers['name']}!`) }) 

inquirer . , .

Node.js. readline , readline-sync inquirer. , , .

Node.js, exports


, API module.exports , . Node.js , . , require , :

 const library = require('./library') 

library.js , , , .

, , - , . , , . , API module.exports , .

.

module.exports , , . :

 const car = { brand: 'Ford', model: 'Fiesta' } module.exports = car //..   const car = require('./car') 

, exports . , , — :

 const car = { brand: 'Ford', model: 'Fiesta' } exports.car = car 

:

 exports.car = { brand: 'Ford', model: 'Fiesta' } 

, , :

 const items = require('./items') items.car 

:

 const car = require('./items').car 

module.exports exports ?

, module.exports . .


Node.js-, REPL, , Node.js. npm, , , package.json package-lock.json .

Pembaca yang budiman! Node.js-?

Source: https://habr.com/ru/post/id423701/


All Articles