ویرگول
ورودثبت نام
نیما حبیب خدا
نیما حبیب خدایه برنامه نویس معمولی لینوکس کار
نیما حبیب خدا
نیما حبیب خدا
خواندن ۴ دقیقه·۸ سال پیش

نوشتن کوئری Mysql در Node.js


تقریبا یک سال پیش یک پروژه میخواستم روی الکترون انجام بدم که نیاز داشتم به کوئری زدن mysql . به این دلیل که پایگاه داده از قبل درست شده بود و نمیشد کاریش کرد .

منم روی node.js با mongoos کار میکردم و اتفاق نیفتاده بود که برم روی mysql برای node.js .

خیلی نگشتم . داخل npm خیلی راحت پیداش کردم .

این صفحه npm برای mysql :

https://www.npmjs.com/package/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

https://en.wikipedia.org/wiki/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 رو اینجا نمیخواستم بگم . فرض بر اینه که میدونید . ارادت .


node jsmysql
۱۹
۱۰
نیما حبیب خدا
نیما حبیب خدا
یه برنامه نویس معمولی لینوکس کار
جاوااسکریپت۸
جاوااسکریپت۸
انتشارات تخصصی زبان برنامه نویسی جاوااسکریپت و تکنولوژی‌های Front-end
شاید از این پست‌ها خوشتان بیاید