یه برنامه نویس معمولی لینوکس کار
نوشتن کوئری 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 رو اینجا نمیخواستم بگم . فرض بر اینه که میدونید . ارادت .
مطلبی دیگر از این انتشارات
نوشتن اولین api با فریم ورک express در Node.js به همراه آموزش mongodb با متد mvc قسمت دوم
مطلبی دیگر از این انتشارات
جاوا اسکریپت و ۱۰ دلیل برای یادگیری آن
مطلبی دیگر از این انتشارات
Parse CSS-2