آموزش های ویدیویی رایگان برنامه نویسی و وب

کانکشن به mySql در نود جی اس ( Node js ) و ذخیره اطلاعات در متغیر با Async/Await

2

در گذشته در مورد زبان برنامه نویسی جاوا اسکریپت و ویژگی های خفن آن صحبت کرده ایم.همچنین در مطلبی دیگر در مورد کتابخانه جاوا اسکریپت ری اکت جی اس صحبت کردیم و نحوه نصب ری اکت را توضیح دادیم.حالا در این مطلب قصد آموزش کانکشن به MySql در نود جی اس را داریم.

همانطور که می دانید تقریبا همه وب اپلیکیشن ها برای آنکه اپلیکیشنی کامل محسوب شوند نیاز به یک دیتابیس و پایگاه داده برای ذخیره اطلاعات خود دارند.بنابراین اصلا دور از انتظار نیست اگر نیازمند به اتصال به Mysql در Node js باشید.

زبان برنامه نویسی جاوا اسکریپت ٬ زبانی Asynchronous است

زبان برنامه نویسی جاوا اسکریپت به دلیل Asynchronous بودن ٬ تمامی خط های کد شما را به طور همزمان اجرا می کند و این مسئله هم می تواند مثبت باشد و هم منفی.و به همین دلیل شما هنگام اتصال به دیتابیس در نود جی اس امکان صبر کردن برای اتمام کوئری و دریافت نتیجه آن و سپس رندر کردن صفحه نیستید.البته این حالت عادی و بدون استفاده از Async/Await است.حالا در این مطلب به نحوه به کارگیری Async/Await برای استفاده در کانکشن Mysql در نود جی اس می پردازیم.

کانکشن به Mysql در نود جی اس
کانکشن به Mysql در Node js

Async/Await در جاوا اسکریپت به چه معناست؟

پس از آنکه سازندگان زبان برنامه نویسی جاوا اسکریپت از مشکلی که در بالا ذکر کردیم مطلع شدند ٬ اقدام به نوشتن ساختاری جدید کردند که Async/Await نام دارد.با استفاده از این ساختار ٬ شما می توانید عمل اول را انجام داده و مشخص کنید که هنگامی که این عمل به اتمام رسید عمل دوم را انجام دهد.

نصب ماژول MySql برای استفاده در نود جی اس

ابتدا برای اتصال به دیتابیس MySql در نود جی اس ٬ نیاز به نصب کردن ماژول آن دارید.برای این کار کامندلاین و یا ترمینال خود را در محل پروژه باز نموده و دستور زیر را وارد نمایید :

npm install mysql

توجه : برای تغییر پوشه در کامندلاین ویندوز و ترمینال لینوکس یا مک می توانید از دستور cd استفاده نمایید.مثال :

cd my-app

همچنین برای مشاهده محتوای پوشه کنونی که درون آن قرار دارید میتوانید از دستور dir برای ویندوز و ls برای لینوکس و مک استفاده نمایید.مثال :

dir // برای ویندوز
ls // برای مک و لینوکس

به کارگیری Async/Await برای کانکشن به Mysql در نود جی اس

برای آنکه بتوانید اطلاعات دریافت شده از دیتابیس را در یک متغیر ذخیره نمایید و سپس از آن متغیر در قسمت های دیگر برنامه خود استفاده نمایید ٬ تنها کافیست کد زیر را در یک فایل جاوا اسکریپت ذخیره نموده و سپس آن را در قسمت های مورد نیاز خود ایمپورت و استفاده نمایید.

const util = require('util') // ایپمورت کردن ماژول util برای استفاده از تابع Promisify
const mysql = require('mysql') // ایمپورت کردن mysql برای اتصال به دیتابیس در نود جی اس
const pool = mysql.createPool({ // ایجاد یک کانکشن جدید به دیتابیس و ذخیره آن در ثابت pool
    connectionLimit: 10, // تعداد کانکشن های همزمان به دیتابیس
    host: 'آدرس هاست دیتابیس',
    user: 'نام کاربری دیتابیس',
    password: 'کلمه عبور دیتابیس',
    database: 'نام دیتابیس'
})

// چک کردن کانکشن به دیتابیس
pool.getConnection((err, connection) => {
    if (err) {
        if (err.code === 'PROTOCOL_CONNECTION_LOST') {
            console.error(کانکشن دیتابیس بسته شد.')
        }
        if (err.code === 'ER_CON_COUNT_ERROR') {
            console.error('تعداد کانکشن ها به دیتابیس زیاد است.')
        }
        if (err.code === 'ECONNREFUSED') {
            console.error('کانکشن به دیتابیس رد شد.')
        }
    }

    if (connection) connection.release()

    return
})

// Promisify برای Node.js async/await.
pool.query = util.promisify(pool.query) // تبدیل متود pool.query به تابعی با پشتیبانی از Async/Await

module.exports = pool // اکسپورت کردن ماژول برای استفاده در دیگر فایل ها

ایمپورت ماژولی که برای اتصال به Mysql در نود جی اس نوشتیم

تکه کد بالا را درون فایلی ذخیره نمایید ( ما در این مطلب کد بالا را در فایلی با نام mysql.js ذخیره کردیم ).سپس در ابتدای فایلی که نیاز به کانکشن به MySql در Node js را دارید ٬ خط کد زیر را بنویسید :

const pool = require('آدرس فایل شما')
// مثال : 
const pool = require('./mysql.js')

استفاده از ماژول کانکشن به Mysql در نود جی اس بصورت Async/Await

در مثالی که در کد بالا نوشتیم ٬ کد اتصال به دیتابیس ما در فایلی به نام mysql.js در کنار فایلی که در حال نوشتن کد در آن هستیم قرار دارد.سپس بصورت زیر در هرجا که نیاز به کوئری دیتابیس نیاز داریم کد می نویسیم :

// ... کد های شما
const example = await pool.query('کوئری')
// ... کد های شما

دقت داشته باشید که تنها در توابعی که بصورت async تعریف شده باشند شما می توانید از await استفاده نمایید.مثال :

app.get('/',async (req,res) => {
var data = await pool.query('SELECT * FROM test');
return data;
}

توجه : کد بالا ساختار کدنویسی فریم ورک Express.js می باشد!

امیدواریم که این مطلب برای شما مفید بوده باشد.در صورتی که سوالی دارید و یا به مشکل برخورد کردید با ما در قسمت کامنت ها در میان بگذارید.

2 نظرات
  1. کاویانی می گوید

    سلام
    سوالی دارم
    من تابعی در برنامه م دارم که کد هر ردیف رو از جدول table1 نمایش میده به این شکل

    var query = connection.query(“SELECT * FROM table1”, function (err, result, fields) {
    if (err) console.log(err);
    else {
    for(var k=0;k<result.length;k++) {

    console.log(result[k].code);
    console.log(getTitle(result[k].code))
    }
    }
    });

    حالا می خوام تابع getTitle عنوان کد رو از جدول دیگری table2 بخونه و در کنار کد نمایش بده. این کار با پی اچ پی آسونه ولی آیا به روشی که شما در بالا گفتید جواب میده؟

    function getTitle(code) {

    var res = “”;
    var query = await connection.query(“SELECT * FROM table2 WHERE code = ‘”+code+”‘ LIMIT 1”, function (err, result, fields) {
    if (!err) {
    res = result[0].title;
    }
    });
    return res;
    }

    من نمی خوام تا حد امکان در ساختار بخش اول تغییر ایجاد کنم تابع getTitle رو چطور باید بنویسم که همزمان عنوان رو از جدول دیگر بخونه.
    باسپاس فراوان

    1. محمد صالح موسی پور می گوید

      سلام وقت بخیر.
      شما دارید از await در فانکشنی که async نیست استفاده می کنید.در صورتی که فانکشن رو به درستی بنویسید نباید مشکلی وجود داشته باشه.
      موفق باشید

ارسال یک پاسخ

آدرس ایمیل شما منتشر نخواهد شد.