Panduan Node.js, Bagian 10: Modul Standar, Streaming, Basis Data, NODE_ENV

Materi ini menyimpulkan seri terjemahan manual Node.js. Hari ini kita akan berbicara tentang os, acara, dan modul http, membahas bekerja dengan aliran dan basis data, dan membahas penggunaan Node.js dalam pengembangan dan produksi aplikasi.




Modul os Node.js


Modul os menyediakan akses ke banyak fungsi yang dapat digunakan untuk memperoleh informasi tentang sistem operasi dan perangkat keras komputer yang menjalankan Node.js. Ini adalah modul standar, Anda tidak perlu menginstalnya, untuk bekerja dengannya dari kode, cukup sambungkan:

 const os = require('os') 

Ada beberapa properti berguna di sini, yang, khususnya, mungkin berguna ketika bekerja dengan file.

Jadi, properti os.EOL memungkinkan os.EOL untuk mengetahui pemisah garis yang digunakan dalam sistem (sebuah os.EOL garis). Di Linux dan macOS, ini \n , di Windows, \r\n .

Perlu dicatat bahwa ketika kita menyebutkan "Linux dan macOS" di sini, kita berbicara tentang platform yang kompatibel dengan POSIX. Demi singkatnya, kami tidak menyebutkan platform yang kurang populer di sini.

Properti os.constants.signals menyediakan informasi tentang konstanta yang digunakan untuk memproses sinyal proses seperti SIGHUP , SIGKILL , dan sebagainya. Di sini Anda dapat menemukan detail tentang mereka.

Properti os.constants.errno berisi konstanta yang digunakan untuk pesan kesalahan - seperti EADDRINUSE , EOVERFLOW .

Sekarang pertimbangkan metode utama modul os .

▍os.arch ()


Metode ini mengembalikan string yang mengidentifikasi arsitektur sistem, misalnya, arm , x64 , arm64 .

▍os.cpus ()


Mengembalikan informasi tentang prosesor yang tersedia di sistem. Misalnya, informasi ini mungkin terlihat seperti ini:

 [ { model: 'Intel(R) Core(TM)2 Duo CPU     P8600 @ 2.40GHz',   speed: 2400,   times:    { user: 281685380,      nice: 0,      sys: 187986530,      idle: 685833750,      irq: 0 } }, { model: 'Intel(R) Core(TM)2 Duo CPU     P8600 @ 2.40GHz',   speed: 2400,   times:    { user: 282348700,      nice: 0,      sys: 161800480,      idle: 703509470,      irq: 0 } } ] 

▍os.endianness ()


Mengembalikan BE atau LE tergantung pada urutan byte apa (Big Engian atau Little Endian) digunakan untuk mengkompilasi file biner Node.js.

▍os.freemem ()


Mengembalikan jumlah memori sistem bebas dalam byte.

▍os.homedir ()


Mengembalikan jalur ke direktori home dari pengguna saat ini. Misalnya, '/Users/flavio' .

▍os.hostname ()


Mengembalikan nama host.

▍os.loadavg ()


Mengembalikan, dalam sebuah array, rata-rata memuat data yang dihitung oleh sistem operasi. Informasi ini hanya masuk akal di Linux dan macOS. Ini bisa terlihat seperti ini:

 [ 3.68798828125, 4.00244140625, 11.1181640625 ] 

▍os.networkInterfaces ()


Mengembalikan informasi tentang antarmuka jaringan yang tersedia di sistem. Sebagai contoh:

 { lo0:  [ { address: '127.0.0.1',      netmask: '255.0.0.0',      family: 'IPv4',      mac: 'fe:82:00:00:00:00',      internal: true },    { address: '::1',      netmask: 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff',      family: 'IPv6',      mac: 'fe:82:00:00:00:00',      scopeid: 0,      internal: true },    { address: 'fe80::1',      netmask: 'ffff:ffff:ffff:ffff::',      family: 'IPv6',      mac: 'fe:82:00:00:00:00',      scopeid: 1,      internal: true } ], en1:  [ { address: 'fe82::9b:8282:d7e6:496e',      netmask: 'ffff:ffff:ffff:ffff::',      family: 'IPv6',      mac: '06:00:00:02:0e:00',      scopeid: 5,      internal: false },    { address: '192.168.1.38',      netmask: '255.255.255.0',      family: 'IPv4',      mac: '06:00:00:02:0e:00',      internal: false } ], utun0:  [ { address: 'fe80::2513:72bc:f405:61d0',      netmask: 'ffff:ffff:ffff:ffff::',      family: 'IPv6',      mac: 'fe:80:00:20:00:00',      scopeid: 8,      internal: false } ] } 

▍os.platform ()


Mengembalikan informasi tentang platform yang dikompilasi Node.js. Berikut adalah beberapa nilai pengembalian yang mungkin:

  • darwin
  • freebsd
  • linux
  • openbsd
  • win32

▍os.release ()


Mengembalikan string yang mengidentifikasi nomor rilis sistem operasi.

▍os.tmpdir ()


Mengembalikan jalur ke direktori yang ditentukan dalam sistem untuk menyimpan file sementara.

▍os.totalmem ()


Mengembalikan jumlah total memori sistem dalam byte.

▍os.type ()


Mengembalikan informasi yang mengidentifikasi sistem operasi. Sebagai contoh:

  • Linux - Linux.
  • Darwin - macOS.
  • Windows_NT - Windows.

▍os.uptime ()


Mengembalikan waktu aktif sistem dalam detik sejak reboot terakhir.

Modul acara Node.js


Modul events memberi kita kelas EventEmitter , yang dirancang untuk bekerja dengan acara di platform Node.js. Kami sudah berbicara sedikit tentang modul ini pada seri materi ketujuh ini. Ini dokumentasi untuknya. Di sini kita melihat API modul ini. Ingatlah bahwa untuk menggunakannya dalam kode Anda perlu menghubungkannya, seperti biasanya dengan modul standar. Setelah itu, Anda perlu membuat objek EventEmitter baru. Ini terlihat seperti ini:

 const EventEmitter = require('events') const door = new EventEmitter() 

Objek dari kelas EventEmitter menggunakan mekanisme standar, khususnya, peristiwa berikut:

  • newListener - acara ini newListener ketika event handler ditambahkan.
  • removeListener - dipanggil saat pawang dihapus.

Pertimbangkan metode objek yang paling berguna dari kelas EventEmitter (objek serupa dalam nama metode ditunjukkan sebagai emitter ).

▍emitter.addListener ()


Alias ​​untuk metode emitter.on() .

▍emitter.emit ()


Menghasilkan suatu acara. Meminta semua penangan acara secara sinkron sesuai urutan pendaftarannya.

▍emitter.eventNames ()


Mengembalikan array yang berisi acara yang terdaftar.

▍emitter.getMaxListeners ()


Mengembalikan jumlah maksimum penangan yang dapat ditambahkan ke objek dari kelas EventEmitter . Standarnya adalah 10. Jika perlu, parameter ini dapat ditambah atau dikurangi menggunakan metode setMaxListeners() .

▍emitter.listenerCount ()


Mengembalikan jumlah penangan acara yang namanya diteruskan ke metode ini sebagai parameter:

 door.listenerCount('open') 

▍emitter.listeners ()


Mengembalikan array penangan acara untuk acara yang sesuai, yang namanya diteruskan ke metode ini:

 door.listeners('open') 

▍emitter.off ()


Alias ​​untuk metode emitter.removeListener() , diperkenalkan pada Node 10.

▍emitter.on ()


Daftarkan panggilan balik yang dipanggil saat suatu peristiwa dihasilkan. Berikut cara menggunakannya:

 door.on('open', () => { console.log('Door was opened') }) 

▍emitter.once ()


Ia mendaftarkan panggilan balik yang hanya dipanggil sekali - pada kejadian pertama dari suatu peristiwa untuk mana panggilan balik ini didaftarkan. Sebagai contoh:

 const EventEmitter = require('events') const ee = new EventEmitter() ee.once('my-event', () => { //         }) 

▍emitter.prependListener ()


Saat mendaftarkan pawang menggunakan metode on() atau addListener() , pawang ini ditambahkan ke akhir antrian pawang dan dipanggil terakhir untuk menangani acara terkait. Saat menggunakan metode prependListener() , pawang ditambahkan ke bagian depan antrian, yang menyebabkannya dipanggil terlebih dahulu untuk memproses acara.

▍emitter.prependOnceListener ()


Metode ini mirip dengan yang sebelumnya. Yaitu, ketika seorang penangan yang ditujukan untuk satu panggilan terdaftar menggunakan metode once() , itu ternyata menjadi yang terakhir dalam antrian penangan dan yang terakhir dipanggil. Metode prependOnceListener() memungkinkan Anda untuk menambahkan handler ke depan antrian.

▍emitter.removeAllListeners ()


Metode ini menghapus semua penangan untuk peristiwa tertentu yang terdaftar di objek yang sesuai. Mereka menggunakannya seperti ini:

 door.removeAllListeners('open') 

▍emitter.removeListener ()


Menghapus handler yang ditentukan untuk diteruskan ke metode ini. Untuk menyimpan penangan untuk penghapusan selanjutnya, panggilan balik yang sesuai dapat ditugaskan ke variabel. Ini terlihat seperti ini:

 const doSomething = () => {} door.on('open', doSomething) door.removeListener('open', doSomething) 

▍emitter.setMaxListeners ()


Metode ini memungkinkan Anda untuk menentukan jumlah penangan maksimum yang dapat ditambahkan ke satu peristiwa dalam instance kelas EventEmitter . Secara default, seperti yang telah disebutkan, Anda dapat menambahkan hingga 10 penangan untuk acara tertentu. Nilai ini bisa diubah. Gunakan metode ini sebagai berikut:

 door.setMaxListeners(50) 

Modul Node.js http


Pada bagian kedelapan dari seri bahan ini, kita telah berbicara tentang modul http Node.js standar. Dia menerapkan mekanisme pengembang yang dirancang untuk membuat server HTTP. Ini adalah modul utama yang digunakan untuk menyelesaikan masalah pertukaran data melalui jaringan di Node.js. Anda dapat menghubungkannya dalam kode seperti ini:

 const http = require('http') 

Ini terdiri dari properti, metode, dan kelas. Mari kita bicarakan mereka.

▍Properti


http.METHODS


Properti ini mencantumkan semua metode HTTP yang didukung:

 > require('http').METHODS [ 'ACL', 'BIND', 'CHECKOUT', 'CONNECT', 'COPY', 'DELETE', 'GET', 'HEAD', 'LINK', 'LOCK', 'M-SEARCH', 'MERGE', 'MKACTIVITY', 'MKCALENDAR', 'MKCOL', 'MOVE', 'NOTIFY', 'OPTIONS', 'PATCH', 'POST', 'PROPFIND', 'PROPPATCH', 'PURGE', 'PUT', 'REBIND', 'REPORT', 'SEARCH', 'SUBSCRIBE', 'TRACE', 'UNBIND', 'UNLINK', 'UNLOCK', 'UNSUBSCRIBE' ] 

http.STATUS_CODES


Ini berisi kode status HTTP dan deskripsinya:

 > require('http').STATUS_CODES { '100': 'Continue', '101': 'Switching Protocols', '102': 'Processing', '200': 'OK', '201': 'Created', '202': 'Accepted', '203': 'Non-Authoritative Information', '204': 'No Content', '205': 'Reset Content', '206': 'Partial Content', '207': 'Multi-Status', '208': 'Already Reported', '226': 'IM Used', '300': 'Multiple Choices', '301': 'Moved Permanently', '302': 'Found', '303': 'See Other', '304': 'Not Modified', '305': 'Use Proxy', '307': 'Temporary Redirect', '308': 'Permanent Redirect', '400': 'Bad Request', '401': 'Unauthorized', '402': 'Payment Required', '403': 'Forbidden', '404': 'Not Found', '405': 'Method Not Allowed', '406': 'Not Acceptable', '407': 'Proxy Authentication Required', '408': 'Request Timeout', '409': 'Conflict', '410': 'Gone', '411': 'Length Required', '412': 'Precondition Failed', '413': 'Payload Too Large', '414': 'URI Too Long', '415': 'Unsupported Media Type', '416': 'Range Not Satisfiable', '417': 'Expectation Failed', '418': 'I\'ma teapot', '421': 'Misdirected Request', '422': 'Unprocessable Entity', '423': 'Locked', '424': 'Failed Dependency', '425': 'Unordered Collection', '426': 'Upgrade Required', '428': 'Precondition Required', '429': 'Too Many Requests', '431': 'Request Header Fields Too Large', '451': 'Unavailable For Legal Reasons', '500': 'Internal Server Error', '501': 'Not Implemented', '502': 'Bad Gateway', '503': 'Service Unavailable', '504': 'Gateway Timeout', '505': 'HTTP Version Not Supported', '506': 'Variant Also Negotiates', '507': 'Insufficient Storage', '508': 'Loop Detected', '509': 'Bandwidth Limit Exceeded', '510': 'Not Extended', '511': 'Network Authentication Required' } 

http.globalAgent


Properti ini menunjuk ke instance global dari kelas http.Agent . Ini digunakan untuk mengelola koneksi. Ini dapat dianggap sebagai komponen kunci dari subsistem HTTP Node.js. Kita akan berbicara lebih banyak tentang kelas http.Agent bawah ini.

EtMetode


http.createServer ()


Mengembalikan instance baru dari kelas http.Server . Berikut cara menggunakan metode ini untuk membuat server HTTP:

 const server = http.createServer((req, res) => { //      }) 

http.request ()


Memungkinkan Anda membuat permintaan HTTP ke server dengan membuat turunan dari kelas http.ClientRequest .

http.get ()


Metode ini mirip dengan http.request() , tetapi secara otomatis mengatur metode HTTP ke GET dan secara otomatis memanggil perintah dari form req.end() .

▍ Kelas


Modul HTTP menyediakan 5 kelas - Agent , ClientRequest , Server , ServerResponse dan IncomingMessage . Pertimbangkan mereka.

http.Agent


Instance global dari kelas http.Agent dibuat oleh Node.js digunakan untuk mengelola koneksi. Ini digunakan sebagai nilai default untuk semua permintaan HTTP dan menyediakan antrian dan penggunaan kembali soket. Selain itu, ia mendukung kumpulan soket, yang memungkinkan kinerja tinggi dari subsistem jaringan Node.js. Jika perlu, Anda bisa membuat objek http.Agent Anda sendiri.

http.ClientRequest


Objek kelas http.ClientRequest , yang merupakan permintaan yang sedang berjalan, dibuat ketika metode http.request() atau http.get() dipanggil. Ketika respons terhadap permintaan diterima, peristiwa respons dimunculkan, di mana respons dikirimkan - sebuah instance dari http.IncomingMessage . Data yang diperoleh setelah permintaan selesai dapat diproses dengan dua cara:

  • Anda dapat memanggil metode response.read() .
  • Di penangan peristiwa response , Anda bisa mengonfigurasi pendengar untuk peristiwa data , yang memungkinkan Anda bekerja dengan streaming data.

http. server


Contoh kelas ini digunakan untuk membuat server menggunakan perintah http.createServer() . Setelah kita memiliki objek server, kita dapat menggunakan metode-metodenya:

  • Metode listen() digunakan untuk memulai server dan mengatur menunggu dan memproses permintaan yang masuk.
  • Metode close() menghentikan server.

http.ServerResponse


Objek ini dibuat oleh kelas http.Server dan diteruskan sebagai parameter kedua ke acara request saat itu terjadi. Biasanya, objek-objek tersebut dalam kode diberi nama res :

 const server = http.createServer((req, res) => { //res -   http.ServerResponse }) 

Dalam penangan seperti itu, setelah respons server siap dikirim ke klien, metode end() dipanggil, yang melengkapi respons. Metode ini harus dipanggil setelah penyelesaian setiap respons.

Berikut adalah metode yang digunakan untuk bekerja dengan tajuk HTTP:

  • getHeaderNames() - mengembalikan daftar nama header yang diinstal.
  • getHeaders() - mengembalikan salinan header HTTP yang ditetapkan.
  • setHeader('headername', value) - menetapkan nilai untuk header yang ditentukan.
  • getHeader('headername') - mengembalikan header yang ditetapkan.
  • removeHeader('headername') - menghapus header yang diinstal.
  • hasHeader('headername') - mengembalikan true jika respons sudah memiliki header yang namanya diteruskan ke metode ini.
  • headersSent() - mengembalikan true jika header sudah dikirim ke klien.

Setelah memproses header, mereka dapat dikirim ke klien dengan memanggil metode response.writeHead() , yang, sebagai parameter pertama, mengambil kode status. Sebagai parameter kedua dan ketiga, sebuah pesan yang sesuai dengan kode status dan header dapat diteruskan ke sana.

Untuk mengirim data ke klien, metode write() digunakan di badan respons. Ia mengirim data yang disangga ke aliran respons HTTP.

Jika tajuk belum diatur dengan perintah response.writeHead() , tajuk dengan kode status dan pesan yang ditentukan dalam permintaan akan dikirim terlebih dahulu. Anda dapat mengatur nilainya dengan menetapkan nilai untuk statusCode dan statusMessage :

 response.statusCode = 500 response.statusMessage = 'Internal Server Error' 

http.IncomingMessage


Objek kelas http.IncomingMessage dibuat dalam rangka mekanisme berikut ini:

  • http.Server - saat memproses acara request .
  • http.ClientRequest - saat menangani acara response .

Ini dapat digunakan untuk bekerja dengan data respons. Yaitu:

  • Untuk mengetahui kode status respons dan pesan yang sesuai, digunakan statusCode dan statusMessage .
  • Anda bisa melihat headers respons headers rawHearders headers atau rawHearders (untuk daftar header mentah).
  • Anda dapat mengetahui metode permintaan menggunakan properti method .
  • Untuk mengetahui versi HTTP yang digunakan, gunakan properti httpVersion .
  • Properti url digunakan untuk mendapatkan URL.
  • Properti socket memungkinkan Anda untuk mendapatkan objek net.Socket terkait dengan koneksi.

Data respons disajikan sebagai aliran sejak objek http.IncomingMessage mengimplementasikan antarmuka Readable Stream .

Bekerja dengan stream di Node.js


Utas adalah salah satu konsep dasar yang digunakan dalam aplikasi Node.js. Streaming adalah alat yang memungkinkan Anda untuk membaca dan menulis file, mengatur interaksi jaringan antar sistem, dan, secara umum, secara efektif mengimplementasikan operasi pertukaran data.

Konsep utas tidak unik untuk Node.js. Mereka muncul di keluarga OS Unix beberapa dekade yang lalu. Secara khusus, program dapat berinteraksi satu sama lain, mentransmisikan aliran data menggunakan jalur pipa (menggunakan karakter pipa - | ).

Jika kita bayangkan, katakanlah, membaca file tanpa menggunakan stream, maka, selama pelaksanaan perintah yang sesuai, isi file akan sepenuhnya dibaca ke dalam memori, setelah itu akan mungkin untuk bekerja dengan konten ini.

Berkat penggunaan mekanisme aliran, file dapat dibaca dan diproses di bagian-bagian, yang menghilangkan kebutuhan untuk menyimpan sejumlah besar data dalam memori.

Modul aliran Node.js adalah fondasi di mana semua API yang mendukung streaming dibangun.

▍Tentang Kekuatan Menggunakan Streaming


Streaming, dibandingkan dengan metode pemrosesan data lainnya, memiliki keunggulan berikut:

  • Penggunaan memori yang efisien. Bekerja dengan aliran tidak berarti menyimpan dalam memori sejumlah besar data yang dimuat di sana terlebih dahulu, sebelum dimungkinkan untuk memprosesnya.
  • Hemat waktu. Data yang diterima dari aliran dapat diproses lebih cepat daripada ketika Anda harus menunggu mereka untuk dimuat sepenuhnya untuk mulai memprosesnya.

▍ Contoh pekerjaan dengan stream


Contoh tradisional bekerja dengan stream menunjukkan membaca file dari disk.

Pertama, pertimbangkan kode di mana utas tidak digunakan. Modul Node.js fs standar memungkinkan Anda membaca file, setelah itu dapat ditransfer melalui HTTP sebagai tanggapan atas permintaan yang diterima oleh server HTTP:

 const http = require('http') const fs = require('fs') const server = http.createServer(function (req, res) { fs.readFile(__dirname + '/data.txt', (err, data) => {   res.end(data) }) }) server.listen(3000) 

Metode readFile() yang digunakan di sini memungkinkan Anda membaca seluruh file. Ketika pembacaan selesai, ia memanggil panggilan balik yang sesuai.

Metode res.end(data) , dipanggil dalam panggilan balik, mengirimkan konten file ke klien.

Jika ukuran file besar, maka operasi ini akan memakan banyak waktu. Berikut adalah contoh yang sama yang ditulis ulang menggunakan stream:

 const http = require('http') const fs = require('fs') const server = http.createServer((req, res) => { const stream = fs.createReadStream(__dirname + '/data.txt') stream.pipe(res) }) server.listen(3000) 

Alih-alih menunggu saat file sepenuhnya dibaca, kami mulai mentransfer datanya ke klien segera setelah bagian pertama dari data ini siap dikirim.

Metode ipePipe ()


Pada contoh sebelumnya, kami menggunakan konstruksi form stream.pipe(res) , di mana metode stream file pipe() dipanggil. Metode ini mengambil data dari sumbernya dan mengirimkannya ke tujuan.

Itu disebut aliran yang mewakili sumber data. Dalam hal ini, ini adalah aliran file yang dikirim ke respons HTTP.

Nilai kembali metode pipe() adalah aliran target. Ini sangat mudah, karena memungkinkan Anda untuk menghubungkan beberapa panggilan ke metode pipe() :

 src.pipe(dest1).pipe(dest2) 

Ini setara dengan desain seperti itu:

 src.pipe(dest1) dest1.pipe(dest2) 

▍API Node.js yang menggunakan stream


Streaming adalah mekanisme yang berguna, sebagai hasilnya, banyak modul dari kernel Node.js menyediakan kemampuan standar untuk bekerja dengan stream. Kami mencantumkan beberapa di antaranya:

  • process.stdin - mengembalikan utas yang terhubung ke stdin .
  • process.stdout - Mengembalikan utas yang terhubung ke stdout .
  • process.stderr - mengembalikan utas yang terhubung ke stderr .
  • fs.createReadStream() - membuat aliran yang dapat dibaca untuk bekerja dengan file.
  • fs.createWriteStream() - membuat aliran yang dapat ditulis untuk bekerja dengan file.
  • net.connect() - memulai koneksi berbasis aliran.
  • http.request() - mengembalikan turunan dari kelas http.ClientRequest yang menyediakan akses ke aliran yang sedang ditulis.
  • zlib.createGzip() - kompres data menggunakan algoritma gzip dan mengirimkannya ke stream.
  • zlib.createGunzip() - mendekompres aliran gzip .
  • zlib.createDeflate() - kompres data menggunakan algoritma deflate dan mengirimkannya ke stream.
  • zlib.createInflate() - mendekompres aliran deflate .

▍ Berbagai jenis aliran


Ada empat jenis aliran:

  • Aliran yang dapat dibaca adalah aliran dari mana data dapat dibaca. Anda tidak dapat menulis data ke aliran seperti itu. Ketika data tiba dalam aliran seperti itu, buffered sampai konsumen data mulai membacanya.
  • Aliran untuk menulis ( Writable ) adalah aliran di mana Anda dapat mengirim data. Anda tidak dapat membaca data darinya.
  • Duplex stream ( Duplex ) - dalam aliran ini Anda dapat mengirim data dan membacanya. Pada dasarnya ini adalah kombinasi dari aliran untuk membaca dan aliran untuk menulis.
  • Transform stream ( Transform ) - aliran tersebut mirip dengan aliran dupleks, perbedaannya adalah apa yang datang ke input aliran ini akan mengubah apa yang dapat dibaca dari aliran tersebut.

▍Buat aliran baca


, stream :

 const Stream = require('stream') const readableStream = new Stream.Readable() 

, :

 readableStream.push('hi!') readableStream.push('ho!') 


Writable _write() . :

 const Stream = require('stream') const writableStream = new Stream.Writable() 

_write() :

 writableStream._write = (chunk, encoding, next) => {   console.log(chunk.toString())   next() } 

, :

 process.stdin.pipe(writableStream) 


, , :

 const Stream = require('stream') const readableStream = new Stream.Readable() const writableStream = new Stream.Writable() writableStream._write = (chunk, encoding, next) => {   console.log(chunk.toString())   next() } readableStream.pipe(writableStream) readableStream.push('hi!') readableStream.push('ho!') readableStream.push(null) 

readableStream.push(null) .

, readable :

 readableStream.on('readable', () => { console.log(readableStream.read()) }) 


write() :

 writableStream.write('hey!\n') 

▍ ,


, , end() :

 writableStream.end() 

. , , .

MySQL Node.js


MySQL . Node.js , MySQL-, — , .

mysqljs/mysql . , , 12000 GitHub. , MySQL-.


:

 npm install mysql 


:

 const mysql = require('mysql') 

:

 const options = { user: 'the_mysql_user_name', password: 'the_mysql_user_password', database: 'the_mysql_database_name' } const connection = mysql.createConnection(options) 

:

 connection.connect(err => { if (err) {   console.error('An error occurred while connecting to the DB')   throw err } } 


options :

 const options = { user: 'the_mysql_user_name', password: 'the_mysql_user_password', database: 'the_mysql_database_name' } 

. — :

  • host — , MySQL-, — localhost .
  • port — , — 3306 .
  • socketPath — Unix .
  • debug — , .
  • trace — , .
  • ssl — SSL- .

▍ SELECT


SQL- . query , . — , . . :

 connection.query('SELECT * FROM todos', (error, todos, fields) => { if (error) {   console.error('An error occurred while executing the query')   throw error } console.log(todos) }) 

, :

 const id = 223 connection.query('SELECT * FROM todos WHERE id = ?', [id], (error, todos, fields) => { if (error) {   console.error('An error occurred while executing the query')   throw error } console.log(todos) }) 

, , :

 const id = 223 const author = 'Flavio' connection.query('SELECT * FROM todos WHERE id = ? AND author = ?', [id, author], (error, todos, fields) => { if (error) {   console.error('An error occurred while executing the query')   throw error } console.log(todos) }) 

▍ INSERT


INSERT . , :

 const todo = { thing: 'Buy the milk' author: 'Flavio' } connection.query('INSERT INTO todos SET ?', todo, (error, results, fields) => { if (error) {   console.error('An error occurred while executing the query')   throw error } }) 

, , auto_increment , results.insertId :

 const todo = { thing: 'Buy the milk' author: 'Flavio' } connection.query('INSERT INTO todos SET ?', todo, (error, results, fields) => { if (error) {   console.error('An error occurred while executing the query')   throw error }} const id = results.resultId console.log(id) ) 


end() :

 connection.end() 

.

-


Node.js -.

Node.js . , -, NODE_ENV :

 NODE_ENV=production 

. Linux, , :

 export NODE_ENV=production 

, , .bash_profile ( Bash), .

, :

 NODE_ENV=production node app.js 

Node.js. NODE_ENV production :

  • .
  • .

, Pug — , Express, , NODE_ENV production . Express, , . - . .

Express . , , NODE_ENV :

 app.configure('development', () => { //... }) app.configure('production', () => { //... }) app.configure('production', 'staging', () => { //... }) 

, :

 app.configure('development', () => { app.use(express.errorHandler({ dumpExceptions: true, showStack: true })); }) app.configure('production', () => { app.use(express.errorHandler()) }) 


, , Node.js , . , , , Node.js, - , Node.js.

! , Node.js, , .

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


All Articles