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.

[Kami menyarankan Anda untuk membaca] Bagian lain dari siklus iniBagian 1:
Informasi Umum dan MemulaiBagian 2:
JavaScript, V8, beberapa trik pengembanganBagian 3:
Hosting, REPL, bekerja dengan konsol, modulBagian 4:
npm, package.json dan file package-lock.jsonBagian 5:
npm dan npxBagian 6:
loop acara, tumpukan panggilan, timerBagian 7:
Pemrograman AsinkronBagian 8:
Panduan Node.js, Bagian 8: HTTP dan Protokol WebSocketBagian 9:
Panduan Node.js, bagian 9: bekerja dengan sistem fileBagian 10:
Panduan Node.js, Bagian 10: Modul Standar, Streaming, Database, NODE_ENVPDF lengkap dari Node.js Guide 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']
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
,
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-?
