استفاده از دیتابیس mysql در nodejs
امروزه به دلیل گستردگی مجموعه عظیمی از پروژه های مختلف که هر کدام به شکل ساختارمندی نیازمند توسعه پایدار و کارآمد هستند استفاده از بهترین زبان های برنامه نویسی و تکنولوژی های روز برای ایجاد چنین شرایطی برای پروژه در حالت production نیازمند تمرکزی دقیق بر ساختار پروژه و انتخاب بهترین زبان، تکنولوژی برای پیاده سازی است. پیشنهاد می کنم برای درک بهتر نسبت به زبان های برنامه نویسی و تکلنولوژی های مختلف و جایگاه هر کدام در بین توسعه دهنده ها مقالات زیر را مطالعه بفرمایید.
1. بهترین زبان برنامه نویسی برای گرفتن شغل
تقریبا بسیاری از زبان های برنامه نویسی معروف مانند java، php، c# و … امکان اتصال به دیتابیس های مختلف از جمله mysql را از طریق یکسری درایور فراهم می آورند. mysql یکی از محبوب ترین دیتابیس های open-source می باشد که شدت کارآمد و خوب است. و به همین جهت استفاده از آن در پلتفرم nodejs امری بدیهی می باشد. جدای از مزیت های و ویژگی هایی که پلتفرم nodejs دارد با استفاده از پکیج منیجر node تحت عنوان NPM می توانیم به منبع عظیمی از ماژول ها با کاربردهای مختلف دسترسی داشته باشیم. ماژول دیتابیس mysql این امکان را به ما می دهد که بدون هیج مشکل خاصی و در کمترین زمان ممکن پس از نصب و فرآخوانی این ماژول به دیتابیس وصل شویم و و دیتا را در این دیتابیس ذخیره کنیم.
در این مقاله با نحوه اتصال به دیتابیس mysql در پلتفرم nodejs آشنا خواهید شد.
برای استفاده از دیتابیس mysql نیاز هست ماژول آن را نصب کنیم. برای نصب هر ماژولی می توانید وارد سایت NPM شوید.
برای استفاده از دیتابیس mysql علاوه بر استفاده از ماژول mysql و نصب آن باید یک سرور مجازی را در حالت لوکال ایجاد کنید تا به ابزار phpmyadmin دسترسی داشته باشید به همین دلیل باید یکی از نرم افزارهای xampp و یا wamp را نصب کنید.
پیاده سازی :
برای دسترسی به دیتابیس mysql دو راه وجود دارد. می توانید از یک ارتباط simple برای دسترسی سریع به دیتابیس استفاده کنید و تنها از این حالت زمانی می توانید استفاده کنید که تنها یک دیتابیس داشته باشید. از طرفی با استفاده از ارتباط pooled ضمن به اشتراک گذاشتن یک ارتباط می توانید از مدریت جندین ارتباط همزمان برخوردار باشید.
ارتباط simple :
به مثل زیر همراه با جزئیات دقت کنید و با استفاده از مراحلی که ذکر شده است قدم به قدم تمامی مراحل را انجام دهید.
نصب ماژول :
وارد سایت npm شوید ماژول mysql را سرج کنید در repository مربوط به این ماژول نجوه نصب و البته استفاده از این ماژول بیان شده است.
1 | npm i –save mysql |
نکته : دلیل استفاده از save– در دستور بالا نصب این ماژول به صورت local در فولدر پروژه بوده است در صورتی که می خواهید این ماژول را به صورت global نصب کنید از g- باید استفاده کنید.
فرآخوانی ماژول :
در nodejs برای فرآحوانی هر ماژول و فایلی باید از متود require استفاده کنید و نام ماژول و یا مسیر فایل را به عنوان پارامتر متود در نظر بگیرد تا فرآخوانی انجام شود.
1 | const mysql = require('mysql'); |
ایجاد connection :
پس از نصب ماژول و فرآخوانی آن نیاز است تا با استفاده از property هایی که ماژول در اختیارتان قرار می دهد یک connection برای ارتباط با دیتابیس mysql ایجاد کنید که برای ایجاد این ارتباط با استقاده از ماژول mysql باید از createConnection استفاده کنید. به کد زیر دقت کنید :
1 2 3 4 5 6 | const connection = mysql.createConnection({ host : 'localhost', user : '<USERNAME that tipically is root>', password : '<PASSWORD or just use null if youre working lcocally', database : '<DATABASE-NAME>' }); |
همانطور که مشاهده می کنید این property چندین option دارد که باید آن ها را set کنید.
User – password – database :
با ورود به phpmyadmin می توانید دیتابیس خود را ایجاد کنید که شامل نام دیتابیس، نام کاربری و پسورد است از طرفی به صورت default نام کاربری (user) مقدار root و پسورد (password) مقدار null را به خود اختصاص می دهد که به جهت افزایش امنیت دیتابیس خود باید آن را set کنید.
Host :
چون از xampp و یا wamp برای دسترسی به phpmyadmin استفاده می کنیم به مراتب آدرس host بر روی localhost قرار دارد و به صورت default به صورت می باشد اما اگر بر روی سرور یک دیتابیس ایجاد می کنید باید دقت داشته باشید که این آدرس را با توجه به آدرسی که در اختیارتان بعد از ایجاد دیتابیس قرار میدهد set کنید.
در نهایت با استفاده از ویژگی connect می توانید ارتباط با دیتابیس را داشته باشید. کد زیر نمونه ایجاد این ارتباط می باشد :
1 2 3 4 5 6 7 | connection.connect(function(err) { // in case of error if(err){ console.log(err.code); console.log(err.fatal); } }); |
برای اجرای queryها نیاز هست تا یک query از مجموعه عملیات CRUD را انتخاب کرده و با استفاده از ارتباطی که با دیتابیس ایجاد کرده اید و البته ویژگی query خروجی مورد نظر از اجرای آن کوئری را داشته باشید.
1 2 3 4 5 6 7 8 9 10 11 | // Perform a query $query = 'SELECT * from MyTable LIMIT 10'; connection.query($query, function(err, rows, fields) { if(err){ console.log("An error ocurred performing the query."); return; } console.log("Query succesfully executed: ", rows); }); |
پس از ایجاد هر connection و اجرای query می توانید با کد زیر ارتباط را قطع کنید.
1 2 3 4 | // Close the connection connection.end(function(){ // The connection has been closed }); |
ارتباط pooled :
در این نوع ارتباط شما می توانید چنیدن ارتباط همزمان با دیتابیس را مدیریت نمایید و مراحل ایجاد این نوع connection با دیتابیس مشابه مورد ارتباط simple می باشد اما یکسری property های مناسب این نوع ارتباط باید استفاده کنید که در مثال زیر کاملا با آن آشنا می شوید.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | const mysql = require('mysql'); const pool = mysql.createPool({ host : 'example.org', user : 'bob', password : 'secret', database : 'my_dbName' }); pool.getConnection(function(err, connection) { // Use the connection connection.query( 'SELECT something FROM sometable', function(err, rows) { // And done with the connection. connection.release(); // Don't use the connection here, it has been returned to the pool. }); }); // The pool will emit a connection event when a new connection is made within the pool. // If you need to set session variables on the connection before it gets used, you can listen to the connection event. pool.on('connection', function (connection) { console.log("Connected"); // Set a session variable //connection.query('SET SESSION auto_increment_increment=1') }); // <<< CLOSE THE CONNECTION USING pool.end >>> // When you are done using the pool, you have to end all the connections or the Node.js // event loop will stay active until the connections are closed by the MySQL server. // This is typically done if the pool is used in a script or when trying to gracefully shutdown a server. // To end all the connections in the pool, use the end method on the pool: pool.end(function (err) { // all connections in the pool have ended }); |
نکات :
برای افزایش خوانایی کد می توانید به صورت زیر پس از ایجاد ارتباط با دیتابیس query مورد نظر خود را اجرا کنید.
1 2 3 4 5 | connection.query('SELECT * FROM `books` WHERE `author` = ?', ['David'], function (error, results, fields) { // error will be an Error if one occurred during the query // results will contain the results of the query // fields will contain information about the returned results fields (if any) }); |
همچنین می توانید برای ایجاد ارتباط با استقاده از propertyهای مربوط به این موضوع چه در ارتباط simple چه ارتباط pooled از یک url که دربرگیرنده تمامی optionهای مورد نیاز است استفاده کنید به کد زیر دقت نمایید تا متوجه این موضوع شوید.
1 | var connection = mysql.createConnection('mysql://user:pass@host/db?debug=true&charset=BIG5_CHINESE_CI&timezone=-0700'); |
همچنین برای جلوگیری از حملات sql injection به هنگام اجرای یک query می توانید از دستورات زیر استفاده کنید تا این مسئله تا حدودی متوجه شما و دیتابیسی که مورد استقاده قرار می دهید نشود.
Pool.escape() و connection.escape() و mysql.escape() نمونه کد زیر این موضوع را کاملا به شما نشان می دهد.
1 2 3 4 5 6 7 | var userId = 'some user provided value'; var sql = 'SELECT * FROM users WHERE id = ' + connection.escape(userId); connection.query(sql, function(err, results) { // Results ... }); |
امیدوارم مطالعه این مقاله به شما در توسعه پروژه ها و استفاده از دیتابیس mysql در کنار پلتفرم nodejs کمک کنه علاوه بر این برای آشنایی هر چه بیشتر با انواع دیتابیس ها و نحوه استفاده از آن ها در ساختار nodejs پیشنهاد می کنم مطالب زیر را مطالعه کرده و آن چیز که به نمایش گذاشته می شود را با دقت مشاهده کنید.
دیدگاهتان را بنویسید