تاریخ انتشار: جمعه, ۹ خرداد ۱۳۹۹، ۰۴:۰۴ ق.ظ نویسنده: محمدیان

آموزش MongoDB در Nod.js

همانطور که در موضوع قبلی مورد بحث قرار گرفت ، MongoDB یکی از محبوب ترین پایگاه داده ها است که به همراه Node.js. استفاده می شود. در طی این فصل خواهیم دید، چگونه می توانیم با بانک اطلاعاتی MongoDB ارتباط برقرار کنیم. چگونه می توانیم عملیات عادی خواندن داده از یک پایگاه داده و همچنین درج ، حذف و به روز کردن سوابق را در یک پایگاه داده MongoDB انجام دهیم. با توجه به هدف این فصل ، فرض کنید که داده های MongoDB زیر را در دسترس داریم.

نام بانک اطلاعاتی: EmployeeDB

نام مجموعه: Employee

Documents

{

{Employeeid : 1, Employee Name : Guru99},

{Employeeid : 2, Employee Name : Joe},

{Employeeid : 3, Employee Name : Martin},

}

1.ماژول NPM را نصب کنید

برای دسترسی به Mongo از داخل یک برنامه نود به یک درایور نیاز دارید. تعدادی درایور Mongo در دسترس است ، اما MongoDB از محبوب ترین آنها است. برای نصب ماژول MongoDB ، دستور زیر را اجرا کنید.

npm install mongodb

2. ایجاد و بستن اتصال به یک پایگاه داده MongoDB. قطعه کد زیر نحوه ایجاد و بستن اتصال به یک پایگاه داده MongoDB را نشان می دهد.

Node.js MongoDB Tutorial with Examples

توضیح کد:

1. اولین قدم شامل ماژول mongoose است که از طریق تابع require انجام می شود. پس از راه اندازی این ماژول ، می توانیم از توابع لازم موجود در این ماژول برای ایجاد اتصالات به پایگاه داده استفاده کنیم.

2. در مرحله بعد رشته اتصال خود را به پایگاه داده مشخص می کنیم. در رشته اتصال ، 3 مقدار کلیدی وجود دارد که منتقل می شوند.

  • اولین مورد “mongodb” است که مشخص می کند ما به یک پایگاه داده mongoDB وصل می شویم.
  • مورد بعدی “localhost” است به این معنی که ما به یک پایگاه داده در دستگاه محلی وصل می شویم.
  • مورد بعدی “EmployeeDB” است که نام پایگاه داده تعریف شده در پایگاه داده MongoDB ماست.

3.مرحله بعدی اتصال به بانک اطلاعاتی  است. تابع اتصال در URL ما گرفته می شود و امکان تعیین تابع برگشتی  را دارد. با باز شدن اتصال به دیتابیس فراخوانی می شود. این به ما فرصتی می دهد تا بدانیم که آیا اتصال بانک اطلاعاتی موفق بوده یا خیر.

4.در این تابع ، ما رشته ” Connection established ” را به کنسول می نویسیم تا نشان دهیم اتصال موفقیت آمیز ایجاد شده است.

5.در آخر ، ما اتصال را با استفاده از عبارت close می بندیم.

اگر کد بالا به درستی اجرا شود ، رشته ” Connected” همانطور که در شکل زیر نشان داده شده است بر روی کنسول نوشته خواهد شد.

Node.js MongoDB Tutorial with Examples

3. جستجوی داده ها در یک پایگاه داده MongoDB – با استفاده از درایور MongoDB می توانیم داده ها را از پایگاه داده MongoDB واکشی کنیم. در بخش زیر نحوه استفاده از درایور برای واکشی کلیه اسناد از مجموعه Employee در پایگاه داده EmployeeDB ما نشان داده خواهد شد. این مجموعه در پایگاه داده MongoDB ماست ، که شامل تمام اسناد مربوط به کارمندان (employee)است. هر سند دارای یک شناسه شی ( object id)، نام کارمند (Employee name)و شناسه کارمند (employee id)برای تعریف مقادیر سند است.

Node.js MongoDB Tutorial with Examples

var MongoClient = require('mongodb').MongoClient;

var url = 'mongodb://localhost/EmployeeDB';

MongoClient.connect(url, function(err, db) {

    var cursor = db.collection('Employee').find();

    cursor.each(function(err, doc) {

        console.log(doc);

    });

});

توضیح کد:

  1. در مرحله اول ، ما یک مکان نما را ایجاد می کنیم (مکان نما یک اشاره گر است که برای اشاره به رکوردهای مختلفی که از یک پایگاه داده بدست می آیند استفاده می شود. مکان نما برای تکرار از طریق رکوردهای مختلف در پایگاه داده استفاده می شود. در اینجا ما یک متغیر تعریف می کنیم به نام مکان نما ، که برای ذخیره نشانگر به سوابق گرفته شده از پایگاه داده استفاده می شود.) که به سوابق جمع آوری شده از مجموعه MongoDb اشاره می کند. ما همچنین می توانیم مجموعه “Employee” را برای واگذاری سوابق مشخص کنیم. تابع ()find  برای مشخص کردن اینکه می خواهیم همه اسناد را از مجموعه MongoDB بازیابی کنیم ، استفاده می شود.
  2. اکنون از طریق مکان نما خود تکرار می کنیم و برای هر سند در مکان نما می خواهیم یک تابع را اجرا کنیم.
  3. تابع ما این است که به سادگی می خواهیم محتوای هر سند را روی کنسول چاپ کنیم.

توجه: – همچنین می توان یک رکورد خاص را از یک پایگاه داده واکشی کرد. این می تواند با مشخص کردن شرایط جستجو در تابع ()find  انجام شود. به عنوان مثال ، فرض کنید اگر شما فقط می خواستید رکوردی را که نام employee با عنوان Guru99 دارد ، واکشی کنید ، می توانید این عبارت را به شرح زیر بنویسید.

	
var cursor=db.collection('Employee').find({EmployeeName: "guru99"})

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

خروجی:

Node.js MongoDB Tutorial with Examples

از خروجی ،

  • شما قادر خواهید بود به وضوح مشاهده کنید که تمام اسناد موجود در این مجموعه بازیابی می شوند. این کار با استفاده از روش ()find از  (connection (db mongoDBو تکرار آن از طریق تمام اسناد با استفاده از مکان نما امکان پذیر است.

4. درج اسناد در یک مجموعه – اسناد را می توان با استفاده از متد insertOne که توسط کتابخانه MongoDB تهیه شده است ، در یک مجموعه قرار دهید. قطعه کد زیر نشان می دهد که چگونه می توانیم یک سند را در یک مجموعه mongoDB وارد کنیم.

Node.js MongoDB Tutorial with Examples

var MongoClient = require('mongodb').MongoClient;

var url = 'mongodb://localhost/EmployeeDB';

MongoClient.connect(url, function(err, db) {

    db.collection('Employee').insertOne({

        Employeeid: 4,

        EmployeeName: "NewEmployee"

    });

});

توضیح کد:

  1. در اینجا ما از روش insertOne از کتابخانه MongoDB استفاده می کنیم تا یک سند را در مجموعه Employee وارد کنیم.
  2. ما در حال مشخص کردن جزئیات سند راجع به آنچه باید در مجموعه کارمندان وارد شود هستیم. اگر هم اکنون محتویات پایگاه داده MongoDB خود را بررسی کنید ، پرونده را با Employeeid 4 و EmployeeName از “NewEmployee” درج شده در مجموعه Employee پیدا خواهید کرد.

توجه: کنسول هیچ خروجی نشان نمی دهد زیرا رکورد در دیتابیس درج شده است و هیچ خروجی در اینجا قابل نمایش نیست.

برای بررسی اینکه داده ها به درستی در پایگاه داده درج شده است ، باید دستورات زیر را در MongoDB اجرا کنید.

  1. از EmployeeDB استفاده کنید
  2. db.Employee.find ({Employeeid}): 4

اولین جمله اطمینان می دهد که شما به پایگاه داده EmployeeDb متصل هستید. جمله دوم سوابق را که دارای شناسه کارمند 4 است را جستجو می کند.

5. به روزرسانی اسناد در یک مجموعه – اسناد را می توان در یک مجموعه با استفاده از کد updateOne از کتابخانه MongoDB به روز رسانی کرد. قطعه کد زیر نحوه به روزرسانی یک سند در یک مجموعه mongoDB را نشان می دهد.

Node.js MongoDB Tutorial with Examples

var MongoClient = require('mongodb').MongoClient;

var url = 'mongodb://localhost/EmployeeDB';

MongoClient.connect(url, function(err, db) {

    db.collection('Employee').updateOne({

        "EmployeeName": "NewEmployee"

    }, {

        $set: {

            "EmployeeName": "Mohan"

        }

    });

});

توضیح کد:

  1. در اینجا ما از روش “DeleteOne” از کتابخانه MongoDB استفاده می کنیم ، که برای حذف یک سند در یک مجموعه mongoDB استفاده می شود.
  2. ما در حال مشخص کردن شرایط جستجو از سندی هستیم که نیاز به حذف دارد. دراین مورد ، ما می خواهیم سندی را پیدا کنیم که دارای “EmployeeName ” از” NewEmployee”باشد و این سند را حذف کنیم.
  3. سپس می خواهیم مقدار EmployeeName سند را از “NewEmployee” به “Mohan” تنظیم کنیم.

اگر هم اکنون محتویات پایگاه داده MongoDB خود را بررسی کنید ، این پرونده را با Employeeid 4 و EmployeeName از “Mohan” حذف شده از مجموعه Employee پیدا خواهید کرد. برای بررسی اینکه داده ها به درستی در پایگاه داده به روز شده اند ، باید دستورات زیر را در MongoDB اجرا کنید.

  1. از EmployeeDB استفاده کنید
  2. ({ db.Employee.find ({Employeeid: 4

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

6. حذف اسناد در یک مجموعه – اسناد را می توان با استفاده از روش “DeleteOne” تهیه شده توسط کتابخانه MongoDB در یک مجموعه حذف کرد. قطعه کد زیر نحوه حذف یک سند در یک مجموعه mongoDB را نشان می دهد.

Node.js MongoDB Tutorial with Examples

var MongoClient = require('mongodb').MongoClient;

var url = 'mongodb://localhost/EmployeeDB';

MongoClient.connect(url, function(err, db) {

    db.collection('Employee').deleteOne(

        {

            "EmployeeName": "Mohan"

        }

    );

});

توضیح کد:

1.در اینجا ما از روش “DeleteOne” از کتابخانه MongoDB استفاده می کنیم ، که برای حذف یک سند در یک مجموعه mongoDB استفاده می شود.

2. ما در حال مشخص کردن شرایط جستجو برای حذف  سندی هستیم که نیاز به حذف شدن دارد. در این مورد  ، ما می خواهیم سندی را پیدا کنیم که دارای EmployeeName ” از “Mohan”باشد و این سند را حذف کنیم.

اگر هم اکنون محتویات پایگاه داده MongoDB خود را بررسی کنید ، این پرونده را با “Employeeid 4 “و EmployeeName “از “Mohan” حذف شده از مجموعه “Employee “پیدا خواهید کرد.برای بررسی اینکه داده ها به درستی در پایگاه داده به روز شده اند ، باید دستورات زیر را در MongoDB اجرا کنید.

1.از EmployeeDB استفاده کنید.

2.()db.Employee.find

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

 

ساختن یک برنامه گره اکسپرس با MongoDB برای ذخیره و سرویس محتوا

ساختن یک برنامه کاربردی با ترکیبی از Express و MongoDB امروزه کاملاً رایج است. هنگام کار با برنامه های کاربردی مبتنی بر وب JavaScript ، معمولاً در اینجا اصطلاح MEAN stack وجود دارد.

  • اصطلاح MEAN stack به مجموعه ای از فناوریهای مبتنی بر JavaScript است که برای توسعه برنامه های وب استفاده می شود.
  • MEAN مخفف MongoDB ، ExpressJS ، AngularJS وNod js می باشد.

از این رو ، همیشه خوب است بدانیم که چگونه Node.js و MongoDB با هم کار می کنند تا برنامه هایی را که با پایگاه داده های پشتیبان  تعامل دارند را ارائه دهند.

بیایید به یک مثال ساده از چگونگی استفاده از “express ” و “MongoDB” با هم نگاه کنیم. به عنوان مثال ما از همان مجموعه Employee در پایگاه داده MongoDB EmployeeDB استفاده خواهیم کرد. اکنون Express را برای نمایش داده ها در صفحه وب خود هنگام درخواست کاربر ، وارد می کنیم. هنگامی که برنامه ما روی Node.js اجرا می شود ، ممکن است نیاز به مرور آدرس اینترنتی http: // localhost: 3000 / Employeeid باشد.

با راه اندازی این صفحه ، تمام شناسه کارمند (employee id)موجود در مجموعه Employee نمایش داده می شود. بنابراین بیایید قطعه کد را در بخش هایی مشاهده کنیم که به ما امکان دستیابی به این هدف را می دهد.

مرحله 1) تمام کتابخانه هایی را که باید در برنامه های ما استفاده شوند تعریف کنید ، که در مورد ما کتابخانه MongoDB و Express است.

Node.js MongoDB Tutorial with Examples

توضیح کد:

  1. ما در حال تعریف کتابخانه ” Express ” خود هستیم که در برنامه ما استفاده خواهد شد.
  2. ما در حال تعریف کتابخانه ” Express ” خود هستیم که برای اتصال به پایگاه داده MongoDB در برنامه کاربردی ما استفاده می شود.
  3. در اینجا ما URL پایگاه داده خود را برای اتصال به آن تعریف می کنیم.
  4. سرانجام ، ما رشته ای را تعریف می کنیم که برای ذخیره کردن مجموعه شناسه کارمندان ما باید بعداً در مرورگر نمایش داده شود ، استفاده می شود.

مرحله 2) در این مرحله ، اکنون می خواهیم همه سوابق موجود در مجموعه ‘Employee’ خود را بدست آوریم و مطابق با آنها کار کنیم.

Node.js MongoDB Tutorial with Examples

توضیح کد:

  1. ما در حال ایجاد مسیری برای برنامه خود هستیم که “Employeeid” نام دارد. بنابراین هر وقت کسی به http: // localhost: 3000 / Employeeid برنامه ما مراجعه کند ، قطعه کد تعریف شده برای این مسیر اجرا خواهد شد.
  2. در اینجا ما تمام پرونده های موجود در مجموعه “Employee” خود را از طریق فرمان () db.collection(‘Employee’).findدریافت می کنیم. سپس ما این مجموعه را به متغیری به نام مکان نما اختصاص می دهیم. با استفاده از این متغیر مکان نما ، می توانیم تمام سوابق مجموعه را مرور کنیم.
  3. اکنون ما از تابع  ()cursor.eachبرای حرکت در سوابق مجموعه ما استفاده می کنیم. برای هر رکورد ، ما می خواهیم قطعه کد را تعریف کنیم که هنگام دستیابی به هر رکورد چه کاری باید انجام شود.
  4. سرانجام ، می بینیم که اگر رکورد برگشتی تهی نیست ، ما  “Employee “را از طریق دستور “item.Employeeid” می گیریم. بقیه ی کد فقط ساخت کد HTML مناسب است که به ما اجازه می دهد نتایج ما به درستی در مرورگر نمایش داده شود.

مرحله 3) در این مرحله ، ما می خواهیم که خروجی خود را به صفحه وب ارسال کنیم و برنامه خود را در پورت خاصی گوش دهیم.

Node.js MongoDB Tutorial with Examples

توضیح کد:

  1. در اینجا ما کل مطالبی را که در مرحله قبل ساخته شده است به صفحه وب ما ارسال می کنیم. پارامتر ‘res’ به ما اجازه می دهد تا به عنوان پاسخ ، مطالب را به صفحه وب خود ارسال کنیم.
  2. ما در حال ساخت کل برنامه  Nod js درپورت 3000 هستیم.

خروجی:

Node.js MongoDB Tutorial with Examples

از خروجی ،

  • به وضوح نشان می دهد که همه کارمندان ازمجموعه کارمندان بازیابی شدند. دلیل این امر این است که ما از درایور MongoDB برای اتصال به دیتابیس و بازیابی کلیه سوابق Employee استفاده می کنیم و متعاقباً از “Express” برای نمایش رکوردها استفاده می کنیم.

در اینجا کد مرجع شما وجود دارد:

var express = require('express');

var app = express();

var MongoClient = require('mongodb').MongoClient;

var url = 'mongodb://localhost/EmployeeDB';

var str = ""; app.route('/Employeeid').get(function(req, res)

    {

        MongoClient.connect(url, function(err, db) {

            var cursor = db.collection('Employee').find();

            //noinspection JSDeprecatedSymbols

            cursor.each(function(err, item) {

                if (item != null) {

                    str = str + "    Employee id  " + item.Employeeid + "</br>";

                }

            });

            res.send(str);

            db.close();

        });

    });


var server = app.listen(3000, function() {});

توجه: cursor.each ممکن است براساس نسخه درایور MongoDB شما منسوخ شود. برای دور زدن مشکل می توانید // noinspection JSDeprecatedSymbols را قبل از cursor.each اضافه کنید. روش دیگر ، می توانید از ForEach استفاده کنید. در زیر کد نمونه با استفاده از forEach وجود دارد.

var express = require('express');

var app = express();

var MongoClient = require('mongodb').MongoClient;

var url = 'mongodb://localhost/EmployeeDB';

var str = "";

app.route('/Employeeid').get(function(req, res) {

   MongoClient.connect(url, function(err, db) {

       var collection = db.collection('Employee');

       var cursor = collection.find({});

       str = "";

       cursor.forEach(function(item) {

           if (item != null) {

                   str = str + "    Employee id  " + item.Employeeid + "</br>";
           }

       }, function(err) {

           res.send(str);

           db.close();

          }

       );

   });

});

var server = app.listen(8080, function() {});

خلاصه

  • Node.jsدر رابطه با پایگاه داده های NoSQL برای ساخت بسیاری از برنامه های وب امروزی مدرن استفاده می شود. برخی از پایگاههای داده رایج مورد استفاده MySQL و MongoDB هستند.
  • یکی از ماژول های متداول که برای کار با بانکهای اطلاعاتی MongoDB استفاده می شود ، ماژول ای به نام ‘MongoDB’ است. این ماژول از طریق مدیر بسته Node نصب شده است.
  • با استفاده از ماژول MongoDB می توان سوابق مربوط به سوابق موجود در یک مجموعه را پرس و جو کرد و به روزرسانی معمولی ، حذف و درج عملیات را انجام داد.
  • درنهایت ، یکی از شیوه های مدرن، استفاده از فریم ورک Express به همراه MongoDB برای ارائه برنامه های امروزی است. فریم ورک Express می تواند از داده های برگرداننده درایور MongoDB استفاده کند و داده ها را در صفحه وب به کاربر نشان دهد.

تاریخ انتشار: پنجشنبه, ۱ خرداد ۱۳۹۹، ۱۲:۲۷ ق.ظ نویسنده: محمدیان

نست فریمورکی برای ساختن اپلیکشن های بک اند در NodeJs هست که با TypeScript ساخته شده و بطور کامل ازش پشتیبانی میکنه و همچنین قابلیت های کار با وب سوکت، GraphQl ،Rest و ... رو برامون فراهم میکنه.

در لایه های زیرین خودش از فریمورک ExpressJs بطور پیشفرض استفاده میکنه و همچنین میتونید بجای اکسپرس از Fastify هم استفاده کنید. در واقع یک لایه ابسترکشن روی فریمورکهای express یا fastify هست و در عین حال امکان این رو بهمون میده که مستقیما با api های این فریمورک ها هم کار کنیم و خوبیش اینه که میتونیم از لایبری ها و ماژول هایی که برای این فریمورک ها هست به راحتی استفاده کنیم.

چرا بجای اکسپرس از نست استفاده کنیم؟

یکی از دلایل میشه گفت وجود نداشتن ساختار و استانداردی در پروژه های nodejs هست. هر موقع که وارد یک پروژه جدید نود میشیم احتمال زیاد با یک ساختار متفاوت رو به رو میشیم مثلا بعضی ها ممکنه فقط از یک فایل استفاده کرده باشند ! یا بعضیا از معماری MVC و خیلی چیزای دیگه. این حالت بیشتر واسه کسایی که تازه کار هستن و زیاد با معماری ها و ساختارها آشنا نیستن میتونه گیج کننده باشه و در کل احتمال تولید کد کثیف و غیرقابل نگهداری با گذشت زمان بیشتر میشه که در نهایت کار توسعه رو سخت تر و زمانبر میکنه.

نست فقط یک ساختار و معماری رو بهمون معرفی میکنه و میگه که فقط توی این قالب و استایل کد بزنین.

کامپوننت ها معماری یک اپلیکشن نست به این صورته:

  • کنترلر ها (Controllers)
  • ماژول ها (Modules)
  • پروایدر Provider ها (services, repositories, factories, helpers , ...)
  • کلاس های DTO
  • کلاس های مدل (Entities)

دلیل اصلی استفاده از این معماری و ساختار این هست که اپلیکشن رو به بخش های کوچیکی بشکنیم. یادگیری و کارکردن به این شیوه برای کسایی که انگولار یا spring boot کار کردن میتونه ساده باشه.

در ادامه به معرفی این کامپوننت ها بصورت اجمالی میپردازیم.


کنترلر ها (Controllers):

هدف اصلی دریافت درخواست از کاربر یا هرچیزی دیگه ای هست و فرستادنش به کامپوننت سرویس ها (business logic) برای انجام کار مورد نظر و سپس برگرداندن پاسخ.

ماژول ها (Modules):

ماژول مثل یک کانتینر هست که بقیه بخش هایی که بهم مرتبط هستن رو در خودش نگه میداره .

مثلا یک ماژول بنام user فقط شامل سرویس ها و کنترل ها و ... مخصوص و مرتبط کار با یوزر هاست و به این صورت بخش های مختلف اپ رو جداسازی میکنه.

پروایدر ها Providers:

این بخش مقداری عمومی هستش و میتونه شامل ریپازیتوری مدل های دیتابیس، سرویس، کلاس های helper و ... باشه. ایده کلی پرواید ها اینه که میتونه در جاهای مختلف به صورت وابستگی تزریق بشه، مثل یک کانکشن دیتابیس که میتونه در بخش ها و کلاس های مختلفی تزریق بشه و امکان کار کردن با دیتابیس رو بده. در واقع سرویس ها شامل business logic و منطق برنامه هستن که میتونن در هرجایی استفاده بشن.

کلاس های DTO:

این بخش که مخفف Data Transfer Object هست یک ساختار و فرمت برای داده هایی که در یک اندپوینت (route) از کاربر دریافت میشه تعیین میکنه. مثلا میخواید که کاربر سن رو بصورت عدد براتون بفرسته یا نام بصورت یک رشته باشه. که با ترکیب اینها با لایبری هایی مثل class-validator میتونیم بعنوان ولیدشن هایی قوی ازشون استفاده کنیم و داده های ورودی کاربر رو کنترل کنیم.

مدل ها (Entities):

مدل ها جایی هستن که اطلاعات مربوط به دیتابیس رو توی اون ها میسازیم مثلا با استفاده از typeorm که یک ORM کاملا سازگار با تایپ اسکریپت هست میتونیم یک کلاس مدل بسازیم و جدول دیتابیس رو بدون یک خط کد SQL و فقط با کد تایپ اسکریپت درست کنیم.

سخن پایانی:

این فریمورک استاداردها و استایلی رو جلوی پامون میزاره که باعث افزایش کارایی کدنویسی میشه و ممکنه که در نگاه اول سخت بنظر بیاد ولی وقتی که یادش گرفتید درکنار تایپ اسکریپت میتونه به سرعت کدنویسی، خوانایی، ساختار منظم، نگهداری کد و ... کمک زیادی کنه.

میتونید به سایت nestjs مراجعه کنید که داکیومنتش خیلی خوب توضیح داده و به راحتی میتونید از اونجا یاد بگیرید.