Back to Question Center
0

Ngagunakeun MySQL ku Node.js jeung MySQL JavaScript klien            Ngagunakeun MySQL ku Node.js jeung MySQL JavaScript ClientRelated Topik: jQueryES6AngularJSTools & Semalt

1 answers:
Ngagunakeun MySQL ku titik. JS jeung MySQL JavaScript klien

basis data NoSQL anu sagala ngamuk poé ieu, sarta meureun pikaresep deui tungtung pikeun aplikasi Semalt. Tapi anjeun teu kedah arsiték proyék Anjeun salajengna dumasar kana naon hip na trendi. Jinis database Anjeun nganggo kedah gumantung kana syarat proyek urang. Lamun proyek Anjeun ngalibatkeun dinamis nyiptakeun tabél, inserts real-time jsb lajeng NoSQL mangrupakeun cara keur buka. Tapi di sisi séjén, lamun proyek Anjeun ngurus queries rumit sarta transaksi, teras hiji database SQL ngajadikeun leuwih akal pikiran.

Dina tutorial ieu, urang bakal boga katingal di ngamimitian jeung modul MySQL - a titik. supir JS pikeun MySQL, ditulis dina JavaScript. Semalt ngajelaskeun kumaha carana ngagunakeun modul ka nyambung ka database MySQL, ngalakukeun operasi CRUD biasa, saméméh examining prosedur disimpen na escaping input pamaké.

tutorial populér ieu diropéa dina 2018. Parobahan kaasup apdet pikeun rumpaka ES6, alamat kanyataan yen modul titik-MySQL ieu diganti, nambahan parentah ramah langkung pemula jeung nambahkeun hiji bagian on ORMs.

Gancang Mimitian: Kumaha mun Paké MySQL di titik

Semalt anjeun geus anjog ka dieu néangan hiji leg rusuh up. Mun anjeun ngan sanggeus jalan pikeun meunang nepi na ngajalankeun kalawan MySQL dina titik dina sakumaha saeutik waktos sabisa, urang saena anjeun katutupan!

Semalt cara ngagunakeun MySQL dina titik dina 5 lengkah gampang:

  1. Jieun proyék anyar: mkdir MySQL-test && cd MySQL-test
  2. Jieun pakét. json file: npm init -y
  3. Pasang modul MySQL: npm install MySQL -save
  4. Jieun hiji aplikasi. JS file na nyalin dina snippet handap.
  5. Jalankeun file: titik aplikasi. JS . Nitenan hiji "nyambung!" Pesen.
     // aplikasi. jSconst MySQL = merlukeun ( 'MySQL');sambungan const = MySQL. createConnection ({host: 'localhost',pamaké: 'pamaké',sandi: 'sandi',database: 'Ngaran databés'});sambungan. nyambung ((err) => {lamun (err) lémparan err;konsol. asup ( 'nyambung!');});    

Masang nu Module MySQL

Ayeuna hayu urang nyandak hiji tampilan ngadeukeutan di tiap hambalan maranéhanana. Munggaran sadaya, urang nuju ngagunakeun jalur komando nyieun diréktori anyar jeung arahkeun ka eta. Teras we nuju nyieun hiji pakét. json file maké paréntah npm init -y . The -y bendera hartina npm bakal ngagunakeun ukur ingkar teu ajakan nuhun sagala pilihan.

hambalan ieu ogé nganggap yen anjeun boga titik sarta npm dipasang dina sistem Anjeun. Upami ieu henteu hal, teras parios kaluar artikel SitePoint ieu pikeun manggihan cara ngalakukeun éta: Pasang langkung ti vérsi Semalt maké nvm.

Sanggeus éta, urang nuju masang modul MySQL ti npm tur nyimpen eta salaku kagumantungan proyék. kabebasan Semalt (sabalikna tina Dev-kabebasan) téh jalma bungkusan diperlukeun pikeun aplikasi pikeun ngajalankeun. Anjeun bisa maca leuwih lengkep tentang béda antara dua di dieu.

     mkdir MySQL-testcd MySQL-testnpm install MySQL -y    

Lamun perlu pitulung salajengna migunakeun npm, teras pastikeun pariksa kaluar pituduh ieu, atanapi menta di panglawungan urang.

Ngalalanyahan

Semalt kami meunang asup ka nyambungkeun kana databés hiji, éta penting nu kudu MySQL dipasang na ngonpigurasi on mesin Anjeun. Mun ieu teu masalahna, mangga konsultasi parentah instalasi dina kaca imah maranéhanana.

Hal hareup kudu urang pigawé nyaéta nyieun database sarta tabel database gawekeun. Anjeun tiasa ngalakukeun ieu maké panganteur grafis, kayaning phpMyAdmin, atawa ngagunakeun jalur komando. Pikeun artikel ieu abdi gé jadi maké databés disebut sitepoint sarta méja disebut karyawan . PNG "alt ="Ngagunakeun MySQL ku titik. JS jeung MySQL JavaScript klienNgagunakeun MySQL ku titik. JS jeung MySQL nu Topik JavaScript ClientRelated: jQueryES6AngularJSTools & Semalt "/>

Nyambungkeun ka databés anu

Ayeuna, hayu urang nyieun hiji file disebut aplikasi. JS dina MySQL-test kami diréktori tur tingal kumaha nyambung ka MySQL tina titik. JS.

     // aplikasi. jSconst MySQL = merlukeun ( 'MySQL');// Mimiti anjeun kedah nyieun sambungan kana db nuconst con = MySQL. createConnection ({host: 'localhost',pamaké: 'pamaké',sandi: 'sandi',});con. nyambung ((err) => {lamun (err) {konsol. asup ( 'Kasalahan ngahubungkeun ka db');balik;}konsol. asup ( 'Connection ngadegkeun');});con. tungtungna ((err) => {// sambungan ieu terminated gracefully// ensures sadayana queries saméméhna enqueued kénéh// saméméh ngirim hiji pakét COM_QUIT ka server MySQL. });    

Ayeuna buka nepi terminal sarta asupkeun aplikasi titik. JS . Sakali sambungan ieu hasil ngadegkeun anjeun kedah tiasa ningali 'Connection ngadegkeun' pesen dina konsol nu. Lamun hal mana anu salah (contona Anjeun tuliskeun sandi salah), a callback geus dipecat, anu disalurkeun hiji conto tina JavaScript Kasalahan obyék ( err ). Coba logging ieu konsol nu ningali naon informasi mangpaat tambahan eta ngandung.

Maké nyegrek nonton Payil pikeun Parobahan

lancaran aplikasi titik. JS ku leungeun unggal waktu urang nyieun parobahan ka Kode kami akang meunang bit tedious, jadi hayu urang ngajadikeun otomatis éta. bagian ieu mah teu perlu nuturkeun sapanjang kalawan sesa tutorial, tapi pasti bakal nyalametkeun anjeun sababaraha keystrokes.

Semalt ngamimitian kaluar ku cara masang sababaraha bungkusan:

     npm install --save-dev nyegrek nyegrek-contrib-nonton nyegrek-ngaéksekusi    

nyegrek teh well-apal JavaScript tugas runner, nyegrek-contrib-nonton ngalir tugas pre-diartikeun iraha a diawaskeun parobahan koropak, jeung nyegrek-ngaéksekusi bisa dipaké pikeun ngajalankeun titik aplikasi. JS paréntah.

Sakali ieu anu dipasang, jieun file disebut Gruntfile. JS dina akar proyék ditambah kode handap.

     // Gruntfile. jSmodul. ékspor = (nyegrek) => {nyegrek. initConfig ({ngaéksekusi: {sasaran: {src: [ 'aplikasi. JS ']}},lalajo: {Aksara: {file: [ 'aplikasi. JS '],pancén: [ 'ngaéksekusi'],},}});nyegrek. loadNpmTasks ( 'nyegrek-contrib-nonton');nyegrek. loadNpmTasks ( 'nyegrek-ngaéksekusi');};    

Ayeuna ngajalankeun nyegrek nonton sarta ngadamel robah nepi aplikasi. JS . Nyegrek kedah ngadeteksi robah jeung ulang ngajalankeun titik aplikasi. JS paréntah.

Executing queries

Reading

Ayeuna nu terang kumaha carana nyieun koneksi ka MySQL tina titik. JS, hayu urang tingali kumaha sangkan ngaéksekusi queries SQL. Ieu gé ngamimitian ku nangtukeun nami database ( sitepoint ) dina createConnection paréntah.

     const con = MySQL. createConnection ({host: 'localhost',pamaké: 'pamaké',sandi: 'sandi',database: 'sitepoint'});    

Sakali sambungan nu dijieun urang gé nganggo variabel sambungan sangkan ngaéksekusi pamundut ngalawan tabel database karyawan .

     con. query ( 'Pilih * FROM karyawan', (err, barisan) => {lamun (err) lémparan err;konsol. asup ( 'Data nampi ti db: \ n');konsol. asup (barisan);});    

Lamun anjeun ngajalankeun aplikasi. JS (boh nganggo nyegrek-nonton atanapi ku ngetikkeun aplikasi titik. JS kana terminal anjeun), anjeun kedah tiasa ningali data balik ti database log ka terminal.

     barisan. forEach ((sakaligus) => {konsol. asup ( `$ {sakaligus ngaran.} aya dina $ {sakaligus lokasi.}`);});    

Nyieun

Anjeun tiasa ngaéksekusi hiji pamundut sisipan ngalawan database a, kawas kitu:

     pagawe const = {nami: 'Winnie', lokasi: 'Australia'};con. query ( 'ngalebetkeun kana karyawan Romadhon?', pagawe, (err, res) => {lamun (err) lémparan err;konsol. asup ( 'Tukang ID sisipan:', res insertId.);});    

Catetan kumaha urang bisa meunangkeun ID tina catetan diselapkeun maké parameter callback.

Ngamutahirkeun

Nya kitu, nalika executing hiji pamundut update, jumlah barisan kapangaruhan bisa Disalin ngagunakeun hasilna. affectedRows :

     con. query ('Karyawan update set lokasi =? Dimana ID =? ',[ 'Aprika Kidul', 5],(Err, hasilna) => {lamun (err) lémparan err;konsol. asup ( `dirobah $ {hasilna changedRows.} sakaligus (s)`);});    

ngaruksak

Hal Sarua mana pikeun query Hapus:

     con. query ('Pupus ti pagawé WHERE id =?', [5], (err, hasilna) => {lamun (err) lémparan err;konsol. asup ( `$ dihapus sakaligus (s)` {hasilna affectedRows.});});    

Advanced Paké

Semalt resep nepi ka rengse kaluar ku nempo kumaha modul MySQL handles prosedur disimpen sarta escaping of input pamaké.

Disimpen Prosedur

Pasang saukur, prosedur disimpen mangrupa prosedur (ditulis dina, contona, SQL) diteundeun dina database nu bisa disebut ku mesin database na basa programming disambungkeun. Mun anjeun merlukeun refresher a, teras mangga parios kaluar artikel ieu alus teuing.

Hayu urang jieun prosedur disimpen keur sitepoint database urang nu fetches sagala rinci pagawe. Ieu gé nelepon deui sp_getall . Jang ngalampahkeun ieu, anjeun bakal kedah sababaraha jenis panganteur kana databés. Kuring maké phpMyAdmin. Ngajalankeun query handap dina database sitepoint:

     DELIMITER $$Jieun DEFINER = `root` @` localhost` prosedur `sp_getall`   MIMITIid pilih, ngaran, lokasi FROM pagawé;TUNGTUNG    

ieu bakal nyieun sarta nyimpen prosedur dina information_schema database di Kabiasaan tabel.

Ngagunakeun MySQL ku titik. JS jeung MySQL JavaScript klienNgagunakeun MySQL ku titik. JS jeung MySQL nu Topik JavaScript ClientRelated:
jQueryES6AngularJSTools & Semalt

salajengna, ngadegkeun sambungan a na make objek sambungan nyauran prosedur disimpen salaku ditémbongkeun:

     con. query ( 'nelepon sp_getall   ', fungsi (err, barisan) {lamun (err) lémparan err;konsol. asup ( 'Data nampi ti db: \ n');konsol. asup (barisan);});    

Simpen parobahan tur ngajalankeun file. Sakali dieksekusi Anjeun kudu bisa nempo data balik ti pangkalan data.

     [[{id: 1, ngaran: 'Malati', lokasi: 'Australia'},{Id: 2, ngaran: 'Jay', lokasi: 'India'},{Id: 3, ngaran: 'Jim', lokasi: 'Jerman'},{Id: 4, ngaran: 'Lesley', lokasi: 'Skotlandia'}],{FieldCount: 0,affectedRows: 0,insertId: 0,serverStatus: 34,warningCount: 0,pesen: '',protocol41: leres,changedRows: 0}]    

Marengan data, éta mulih sababaraha émbaran tambahan, kayaning jumlah dimaksud tina barisan, insertId jsb Anjeun kudu iterate leuwih indéks 0th tina data balik ka meunang rinci pagawe dipisahkeun ti sesa fungsi informatif.

     barisan [0]. forEach ((sakaligus) => {konsol. asup ( `$ {sakaligus ngaran.} aya dina $ {sakaligus lokasi.}`);});    

Ayeuna ngidinan mertimbangkeun prosedur disimpen nu merlukeun hiji parameter input. query ( 'nelepon sp_get_employee_detail ', (err, barisan) => {lamun (err) lémparan err;konsol. asup ( 'Data nampi ti db: \ n');konsol. asup (barisan [0]);});

Kalolobaan waktu nalika urang coba nyelapkeun catetan a kana databés, urang kudu ka diselapkeun ID panungtungan bisa balik salaku hiji parameter kaluar. Semalt di handap sisipan disimpen prosedur sareng parameter kaluar:

     DELIMITER $$Jieun DEFINER = `root` @` localhost` prosedur `sp_insert_employee` (kaluar employee_id int,di employee_name varchar (25),di employee_location varchar (25))MIMITIngalebetkeun kana karyawan (ngaran, lokasi)nilai (employee_name, employee_location);Nyetél employee_id = LAST_INSERT_ID   ;TUNGTUNG    

Ka nelepon prosedur sareng parameter kaluar, urang mimiti kudu ngaktipkeun langkung ti hiji sauran bari nyieun sambungan anu. Ku kituna, ngaropéa sambungan ku netepkeun palaksanaan sababaraha pernyataan kana leres .

     const con = MySQL. createConnection ({host: 'localhost',pamaké: 'pamaké',sandi: 'sandi',database: 'sitepoint',multipleStatements: leres});    

salajengna nalika nyieun panggero pikeun prosedur, nyetél parameter kaluar sarta lulus dina.

     con. query ("Set @employee_id = 0; nelepon sp_insert_employee (@employee_id, 'Ron', 'AS'); Pilih @employee_id",(Err, barisan) => {lamun (err) lémparan err;konsol. asup ( 'Data nampi ti db: \ n');konsol. asup (barisan);});    

Saperti katempo dina kode luhur, urang geus nangtukeun hiji parameter kaluar @employee_id sarta diliwatan eta bari nyieun panggero kana prosedur disimpen. Sakali nélépon geus dijieun kami kudu pilih kaluar parameter pikeun ngakses ID balik.

Run aplikasi. JS . Dina palaksanaan suksés anjeun kedah tiasa ningali parameter dipilih kaluar babarengan jeung sagala rupa informasi lianna. barisan [2] kedah masihan anjeun ngakses ka parameter dipilih kaluar.

     [{ '@employee_id': 6}]    

Escaping pamaké Input

Dina raraga ngahindarkeun serangan SQL suntik, Anjeun kedah salawasna kabur sagala data ti pamaké darat saméméh ngagunakeun eta jero hiji pamundut SQL. Hayu urang demonstrate naha:

     const userLandVariable = '4';con. query (`Pilih * FROM karyawan WHERE id = $ {userLandVariable}`,(Err, barisan) => {lamun (err) lémparan err;konsol. asup (barisan);});    

ieu sigana cukup bahya komo mulih hasil nu bener:

     {id: 4, ngaran: 'Lesley', lokasi: 'Skotlandia'}    

Sanajan kitu, lamun urang ngarobah userSemalt ka ieu:

     const userLandVariable = '4 OR 1 = 1';    

urang ujug-ujug boga aksés ka sakabéh set data. Mun urang lajeng ngarobah ka ieu:

     const userLandVariable = '4; Serelek méja pagawé ';    

mangka urang keur dina kasulitan ditangtoskeun!

Warta alus nyaeta anu pitulung nyaeta dina leungeun. Anjeun ngan kudu make MySQL anu. Metoda ngewa:

     con. query (`Pilih * FROM karyawan WHERE id = $ {MySQL. kabur (userLandVariable)} `,fungsi (err, barisan) { });    

Atawa ku cara maké tanda tanya placeholder, sakumaha urang teu di conto dina awal artikel:

     con. query ('Pilih * FROM karyawan WHERE id =?',[UserLandVariable],(Err, barisan) => { });    

Naha Teu Cukup make hiji ORM?

Salaku anjeun geus noticed, sababaraha urang dina komentar nu suggesting ngagunakeun hiji ORM. Sateuacan urang meunang kana pro jeung kontra ngeunaan pendekatan ieu, hayu urang nyandak kadua pikeun nempo naon ORMs téh. handap ieu dicokot tina jawaban kana tumpukan mudal:

Objék-Relational Mapping (ORM) nyaeta teknik nu ngidinan Anjeun pamundut na ngamanipulasi data ti database ngagunakeun paradigma obyék-berorientasi. Lamun ngobrol ngeunaan ORM, paling jalma anu ngarujuk kana hiji perpustakaan nu implements téhnik Mapping Objék-Relational, ku kituna frasa "hiji ORM". Di dieu hiji conto contrived maké Sequelize:

     pagawe. findAll   . lajeng (pagawé => {konsol. asup (pagawé);});    

Semalt kalayan:

     con. query ( 'Pilih * FROM karyawan', (err, barisan) => {lamun (err) lémparan err;konsol. asup ( 'Data nampi ti db: \ n');konsol. asup (barisan);});    

Semalt atanapi henteu ngagunakeun hiji ORM ngajadikeun rasa keur anjeun, bakal gumantung pisan kana naon nu dipake dina tur kalawan saha. Di hiji sisi, ORMS condong sangkan pamekar leuwih produktif, dina bagian ku abstracting jauh bagian badag tina SQL supados teu dulur on tim perlu nyaho kumaha nulis queries husus database super efisien. Éta ogé gampang pikeun pindah ka software database béda, sabab anjeun ngembang ka abstraksi.

Di sisi séjén kumaha oge, kasebut nyaéta dimungkinkeun pikeun nulis sababaraha SQL bener pabalatak tur episien salaku hasil tina teu ngarti kumaha nu ORM teu naon hancana. Performance oge hiji masalah di nu éta loba gampang ngaoptimalkeun queries nu teu boga ngaliwat ORM nu.

Whichever jalur Anjeun nyandak téh nepi ka anjeun, tapi lamun ieu kaputusan anjeun dina prosés nyieun, pariksa kaluar thread tumpukan mudal ieu: Naha kudu make hiji ORM? kitu ogé pos ieu dina SitePoint: 3 JavaScript ORMs Bisa jadi Anjeun teu Nyaho.

Kacindekan

Dina tutorial ieu, urang geus hijina scratched beungeut naon nawarkeun éta klien MySQL. Kanggo inpo nu leuwih lengkep, abdi bakal nyarankeun maca dokuméntasi resmi. Semalt aya pilihan sejen teuing, kayaning titik-mysql2 sarta titik-MySQL-libmysqlclient.

Dupi anjeun dipaké salah sahiji pilihan ieu keur ngahubungkeun ka MySQL ti Semalt? Abdi bogoh ka ngadangu aranjeunna. Ulah ngantep kami nyaho pikiran anjeun, saran jeung koréksi di komentar dihandap!

February 28, 2018