یه برنامه نویس معمولی لینوکس کار
نوشتن کوئری Mysql در Node.js
تقریبا یک سال پیش یک پروژه میخواستم روی الکترون انجام بدم که نیاز داشتم به کوئری زدن mysql . به این دلیل که پایگاه داده از قبل درست شده بود و نمیشد کاریش کرد .
منم روی node.js با mongoos کار میکردم و اتفاق نیفتاده بود که برم روی mysql برای node.js .
خیلی نگشتم . داخل npm خیلی راحت پیداش کردم .
این صفحه npm برای mysql :
خوب حالا بریم سر اصل مطلب .
اینکه چجوری از این پکیج استفاده کنیم . اول از همه نصب رو انجام بدیم :
npm install mysql
خیلی راحته و برای استفاده داخل node.js باید require کنیم .
var mysql = require('mysql');
حالا دسترسی کامل به mysql داریم و با متغیر mysql میتونیم به آبجکت هایی که میخوایم برسیم .
اول از همه باید کانکشن رو ایجاد کنیم .
var connection = mysql.createConnection({ host : 'localhost',
user : 'nima_nodejs',
password : 'something',
database : 'nodejs'
});
connection.connect(function(err) {
if (err) throw err;
console.log("Connected! Yeahhhh");
});
خوب حالا اگر فایل رو اجرا کنیم و تنظیمات رو درست ست کرده باشیم ، داخل ترمینال پیغام connected! Yeahh رو میگیریم .
نوبت میرسه به نوشتن کوئری ها . مثال بالا رو تغییر میدم :
var connection = mysql.createConnection({
host : 'localhost',
user : 'me',
password : 'secret',
database : 'my_db
});
connection.connect(); //Now Connected
connection.query('SELECT * FROM users where user_id=1', function (error, users, fields) {
if (error) throw error;
console.log('We find user : ', users[0].name); //now it will print name of users
});
connection.end();
داخل مثال بالا ما یک سلکت ساده زدیم با یک شرط که کاربر با آی دی 1 رو بگیریم و نتیجه رو ریختیم داخل users تا بتونیم ازش استفاده کنیم .
نوشتن کوئری با پرفونس بالاتر با استفاده از Connection pool
این مورد شاید خیلی نیاز نباشه اما جالب و خاصه
اول از همه بگم که pool یا استخر چیه .
استخر کانکشن ها ، به این معنیه که ما چندین کانکشن ایجاد میکنیم و در شرایط داینامیک برای کلاستر کردم ، ازشون استفاده میکنیم .
این مورد میتونه برای ارتباطات روی ریکوئست های خیلی بالا کمک کنه بهتون تا کاربر کوئری kill نشده نداشته باشه .
وقتی که شما میخواین یک کانکشن رو تغییر بدید به صورت داینامیک ، باید کانکشن قبلی رو حتما kill کنین ، در غیر این صورت خیلی به سرور بار اضافه میکنه . دقیقا کار استخر کانکشن همینه که شما بتونین این کلاسترینگ رو با مدیریت کمتری انجام بدید . مثال زیرو ببینید :
var mysql = require('mysql');
var pool = mysql.createPool({
connectionLimit : 10,
host : 'nima_nodejs.org',
user : 'nima_nodejs',
password : 'something',
database : 'node_js'
});
pool.query('SELECT * FROM users', function (error, users, fields) {
if (error) throw error;
console.log('User: ', users[0].name);
});
مقدار connectionLimit به این معنیه که شما چه تعداد کانکشن میخواین بسازین که داخل استخر زنده بمونن . مقدار پیشفرض هم روی 10 هست .
این مفهوم رو که خوب باهاش کار کنین میتونین با قابلیت poolCluster به صورت خیلی زیبا و راحت ، کلاسترینگ رو انجام بدید روی دیتابیس .
اما باز هم میگم که این کار ها برای داکر قابل اجرا نیست و حتما باید mysql خارج کانتینر داکر باشه .
نحوه جلوگیری از Sql Injection :
خوب همه زبان هایی که با sql کار میکنن ، escape کردن رو داخل mysql روی پکیج ها طراحی میکنن و وجود داره . پس ببینیم داخل کد زیر که چجوری میشه یک select امن انجام داد :
var userId = 1;
var sql = 'SELECT * FROM users WHERE id = ' + connection.escape(userId);
connection.query(sql, function (error, users, fields) {
if (error) throw error;
// ...
});
خوب دیدین خیلی راحته و خیلی کاربردی هم هست حتما براتون . میتونین از placeholder هم استفاده کنین به صورت زیر:
connection.query('SELECT * FROM users WHERE id = ?', [userId], function (error, users, fields) { if (error) throw error; // ...});
داخل کد بالا دقت کنین که اول توی کوئری به جای مقدار userid علامت سوال میزاریم و بعدش داخل پارامتر بعدی به شکل آرایه ، مقدار مربوط بهش رو پاس میدیم .
حالا کد زیر هم ببینید برای چند placeholder
var age=35;
var userId= 1;
connection.query('SELECT * FROM users WHERE id = ? AND age = ?', [userId,age], function (error, users, fields) { if (error) throw error; // ...});
خوب فکر کنم خوب و کافی باشه . میتونین از لینک ریپوزیتوری که اول صفحه دادم مطالب بهتر و کامل تری رو بخونین .
دستورات mysql رو اینجا نمیخواستم بگم . فرض بر اینه که میدونید . ارادت .
مطلبی دیگر از این انتشارات
معرفی flow برای جاواسکرپیت
مطلبی دیگر از این انتشارات
سوالات جاوا اسکریپتی برای مصاحبه (قسمت ۱)
مطلبی دیگر از این انتشارات
جاوا اسکریپت چه جوری کار میکنه؟ مروری بر engine , runtime و call stack