تاریخ انتشار: چهارشنبه, ۵ بهمن ۱۴۰۱، ۰۴:۲۱ ب.ظ نویسنده: محمدیان

هنگامی که ما برنامه های Angular را می سازیم، کل DOM را  که در مولفه اصلی برنامه ما قرار دارد کنترل می کنیم که خود آن هم در بدنه HTML  است.
بنابراین این معماری به ما امکان دسترسی به عنوان صفحه HTML را نمی دهد زیرا عنوان در عنصر  <head>  که قبل از <body>  هست قرار دارد.

چگونه می توان عنوان صفحه را تغییر داد؟

Angular یک سرویس خاص برای این کار دارد: Title .

در اینجا مثالی از نحوه استفاده از این سرویس آورده شده است:

import { Component } from '@angular/core';
import { Title } from '@angular/platform-browser';
@Component({
   selector: 'my-app',
   templateUrl: './app.component.html',
   styleUrls: [ './app.component.css' ]
})
export class AppComponent  {
    constructor(private titleService: Title) {
      titleService.setTitle("A test title");
}

با این کار عنوان صفحه روی "A test title" تنظیم می شود. این عنوان را می توان هر چند وقت یک بار در صورت نیاز تغییر داد.

به کد زیر توجه کنید:

export class AppComponent  {
   constructor(private titleService: Title) {
      this.setTitle("A test title");
   }   
   public setTitle( newTitle: string) {
      this.titleService.setTitle( newTitle );
   }
}

و قالب HTML برای دکمه هایی که متد setTitle را فراخوانی می کنند :

<button (click)="setTitle('Hello World')">
   Set title to 'Hello World'
</button>
<button (click)="setTitle('Anything you want')">
   Set title to 'Anything you want'
</button>

در مورد تگ های متا چطور؟

سرویس دیگری به نام متا برای این منظور وجود دارد. سرویس متا کمی بیشتر درگیر است زیرا یک صفحه می تواند چندین متا تگ داشته باشد. در نتیجه، این سرویس دارای تمام روش‌های CRUD (ایجاد - به‌روزرسانی - حذف) را پوشش میدهد.

class Meta {   
  addTag(tag: MetaDefinition, forceCreation: boolean);
  addTags(tags: MetaDefinition[], forceCreation:boolean);
  getTag(attrSelector: string); getTags(attrSelector: string);
  updateTag(tag: MetaDefinition, selector?: string);
  removeTag(attrSelector: string);  
  removeTagElement(meta: HTMLMetaElement);
}
import { Component } from '@angular/core';
import { Title, Meta } from '@angular/platform-browser';@Component({
   selector: 'my-app',
   templateUrl: './app.component.html',
   styleUrls: [ './app.component.css' ]
})
export class AppComponent  {   
    constructor(private titleService: Title, private metaService: Meta ) {
      this.setTitle("A test title");
      this.metaService.updateTag(
        {
         name: 'description', 
         content: 'Changing meta tags using an Angular service' 
        }
      );
   }   
public setTitle( newTitle: string) {
      this.titleService.setTitle( newTitle );
   }
}

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

حافظه میانگیر (Buffer)، در لغت به معنای حائل یا میانگر می‌باشد که در علوم مختلف به شکلی متفاوت به مفهوم یک حافظهٔ میانجی یا موقت بکار می‌رود.

بافر یا buffer عمومأ در علوم کامپیوتر و الکترونیک بیشتر به کار می‌رود که معمولأ اشاره به حافظه موقت یک سیستم دارد.

مثال:

buffer size = 1Mb به معنی این است که حافظه موقت این سیستم برابر با ۱ مگابایت می‌باشد
یا: اندازه حافظه موقت = 1Mb

مثلاً در شیمی محلول بافر محلولی است که ph را ثابت نگه می‌دارد، بنابراین به کمک این محلول می‌توان در مراحل گوناگون یک فرایند شمیایی ph را ثابت نگه داشته و آن را اندازه‌گیری نماییم. مدارهای بافر نیز در الکترونیک مفهومی نزدیک به این دارند. به این صورت که داده‌های سیگنال دریافتی را در خود نگهداری نموده و بر حسب نیاز به سیستم بعدی تحویل می‌دهند. مدارهای بافر به‌طور کلی به دو دسته آنالوگ و دیجیتال تقسیم می‌شوند.

معرفی بافرها

بافر به فضایی از حافظه اشاره دارد که از آن برای ذخیره‌سازی موقت داده‌ها استفاده می‌شود. یک بافر به طور معمول، بین دستگاه‌هایی که از لحاظ سرعت با یکدیگر هماهنگ نیستند، مورد استفاده قرار می‌گیرد، به طوری که این بافرها بدون اینکه به داده‌ها آسیب برسانند، می‌توانند عملیات در حال اجرا را در یک سرعت به خصوص نگهدارند. از بافرها در node.js، زمانی استفاده می‌شود که با یک جریان فایل (دقت کنید منظور از جریان یا stream، دنباله ایی متوالی از داده‌ها است) یا جریان tcp که عمدتاً دارای داده‌های باینری (binary) یا هشت‌تایی (octets) هستند، روبرو می‌شویم.

 

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

برخی از متودهای مربوط به کار بافرها

Buffer.alloc(size[, fill[, encoding]])

Buffer.allocUnsafe(size)

Buffer.from(string[, encoding])

buf.compare(target[, targetStart[, targetEnd[, sourceStart[, sourceEnd]]]])

Buffer.concat(list)

buf.copy(target[, targetStart[, sourceStart[, sourceEnd]]])

buf.equals(otherBuffer)

buf.fill(value)

buf.indexOf(value)

buf.length

buf.slice([start[, end]])

()buf.toJSON

buf.toString([encoding[, start[, end]]])

 

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

آموزش 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 استفاده کند و داده ها را در صفحه وب به کاربر نشان دهد.

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

آموزش جریان داده یا Streams در Node.js : کار با Filestream و Pipes در Node.js

Filestream در Node.js

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

مرحله 1) یک پرونده با نام data.txt ایجاد کنید که داده های زیر را دارد. بگذارید فرض کنیم این پرونده در درایو D دستگاه محلی ما ذخیره شده است.

  • آموزش در Node.js
  • مقدمه
  • مناسبت ها
  • مولدها
  • اتصال داده
  • استفاده از جاسمین

مرحله 2) کد مربوطه را بنویسید که از خواندن داده ها از پرونده استفاده می کند.

Node js Streams Tutorial: Filestream, Pipes

var fs = require("fs");
var stream;
stream = fs.createReadStream("D://data.txt");

stream.on("data", function(data) {
    var chunk = data.toString();
    console.log(chunk);
});


1.ما ابتدا ماژول های ‘fs’ را نیاز داریم که  که شامل تمام عملکردهای مورد نیاز برای ایجاد جریان ها است.توضیح کد: 

2.در مرحله بعدی ما با استفاده از متد createReadStream ، یک جریان قابل خواندن ایجاد می کنیم . به عنوان ورودی ، ما محل فایل data.txt خود را می دهیم.

3.تابع steam.on یک کنترل کننده رویداد است و در آن ، ما اولین پارامتر را به عنوان “داده” مشخص می کنیم. این بدان معناست که هر زمان داده ها  از پرونده وارد جریان می شوند ،یک تابع برگشتی  را اجرا می کنند. در این مورد ، ما در حال تعریف یک تابع برگشتی هستیم که 2 مرحله اساسی را انجام خواهد داد. اولین مورد ، تبدیل داده های خوانده شده از پرونده به عنوان رشته است. مورد دوم ارسال رشته تبدیل شده به عنوان خروجی به کنسول است.

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

5.سرانجام ، ما خروجی هر قطعه تبدیل شده به رشته را به کنسول ارسال می کنیم.

خروجی:

Node js Streams Tutorial: Filestream, Pipes

  • در صورت اجرای صحیح کد ، خروجی فوق را در کنسول مشاهده خواهید کرد. این خروجی همان پرونده موجود در پرونده data.txt خواهد بود.

 

نوشتن فایل بصورت stream در نود جی اس

به همین روش ، که ما یک جریان فایل بصورت Stream ایجاد می کنیم ، می توانیم یک جریان نوشتن فایل بصورت Stream نیز  در یک پرونده ایجاد کنیم. بیایید ابتدا یک پرونده خالی و بدون محتوا به نام data.txt ایجاد کنیم. فرض کنیم این پرونده در درایو D کامپیوتر ما قرار گرفته است. کد زیر نشان می دهد که چگونه می توانیم داده را به پرونده بنویسیم.

Node js Streams Tutorial: Filestream, Pipes

var fs = require("fs");
var stream;
stream = fs.createWriteStream("D://data.txt");

stream.write("Tutorial on Node.js")
stream.write("Introduction")
stream.write("Events")
stream.write("Generators")
stream.write("Data Connectivity")
stream.write("Using Jasmine")

توضیح کد:

  1. ما در حال ایجاد یک جریان قابل نوشتار با استفاده از روش – createWriteStream هستیم. به عنوان ورودی ، ما محل فایل txt خود را می دهیم.
  2. در مرحله بعدی از متد stream.write برای نوشتن سطرهای مختلف متن به فایل متنی استفاده کردیم. stream، از نوشتن این داده ها به پرونده data.txt  مراقبت میکند.

اگر پرونده data.txt را باز کنید ، اکنون داده های زیر را در پرونده مشاهده خواهید کرد.

  • آموزش در Node.js
  • مقدمه
  • رویدادها
  • مولدها
  • اتصال داده
  • استفاده از جاسمین

 

pipes در Node.js

در برنامه های Node ، می توان جریانها را با استفاده از روش ()pipe که دو آرگومان را میگیرد به یکدیگر وصل کرد.

  • یک جریان قابل نوشتار ضروری که به عنوان مقصد برای داده ها عمل می کند و
  • یک شیء اختیاری که برای انتقال گزینه ها استفاده می شود.

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

مرحله 1) یک پرونده با نام datainput.txt ایجاد کنید که داده های زیر را دارد. بگذارید فرض کنیم این پرونده در درایو D دستگاه محلی ما ذخیره شده است.

  • آموزش در Node.js
  • مقدمه
  • رویدادها
  • مولدها
  • اتصال داده
  • استفاده از جاسمین

مرحله 2) یک پرونده  خالی به نام dataOutput.txt ایجاد کنید و آن را در درایو D دستگاه محلی خود قرار دهید.

مرحله 3) برای انجام انتقال داده از پرونده datainput.txt به پرونده dataOutput.txt کد زیر را بنویسید.

Node js Streams Tutorial: Filestream, Pipes

var fs = require("fs");
var readStream = fs.createReadStream("D://datainput.txt");
var writeStream = fs.createWriteStream("D://dataOutput.txt");
readStream.pipe(writeStream);

توضیح کد:

  1. ما ابتدا یک پرونده “readstream” را در پرونده txt خود ایجاد می کنیم که شامل تمام داده های مورد نیاز برای انتقال به پرونده جدید است.
  2. سپس ما نیاز به ایجاد “Writestream” به پرونده dataOutput.txt که فایل خالی ما است و مقصد انتقال داده ها از پرونده datainput.txt است.
  3. سپس از دستور pipes برای انتقال اطلاعات از جریان خواندن به جریان نوشتن استفاده می کنیم. دستور pipes ، تمام داده های وارد شده به خواندن را می گیرد ، و آن را به سمت نوشتن متن سوق می دهد.

اگر اکنون پرونده  dataOutput.txt را باز کرده اید ، تمام داده های موجود در پرونده datainput.txt را مشاهده خواهید کرد.

 

رویدادها یا Events در Node.js

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

بیایید به یک مثال ساده برای تعریف یک رویداد در Node.js بزنیم .ما می خواهیم رویدادی به نام ‘data_received’ ایجاد کنیم. با شروع این رویداد ، متن ” “data received” ” به کنسول ارسال می شود.

Node js Streams Tutorial: Filestream, Pipes

var events = require('events');
var eventEmitter = new events.EventEmitter();
eventEmitter.on('data_received', function() {
    console.log('data received succesfully.');
});

eventEmitter.emit('data_received');

توضیح کد:

  1. با استفاده از تابع require ، ماژول ” events ” را درج کنید. با استفاده از این ماژول ، می توانید رویدادهایی را در nod .js ایجاد کنید.
  2. یک فرستنده ی رویدادهای جدید ایجاد کنید. این مورد برای پیوند دادن این رویداد استفاده می شود ، که در این مورد “data_received” به یک تابع برگشتی است که در مرحله 3 تعریف شده است.
  3. ما یک تابع رویداد محور را تعریف می کنیم که می گوید اگر در صورت بروز رویداد “data_received” ما باید متن “data_received” را درخروجی کنسول قراردهیم.
  4. در آخر ، ما با استفاده از تابع  eventEmiter.emit یک اسلحه دستی از رویداد خود داریم. این رویداد data_received را شروع می کند.

هنگام اجرای برنامه ، متن “data received ” مطابق شکل زیر به کنسول ارسال می شود.

Node js Streams Tutorial: Filestream, Pipes

 

انتشار رویدادها یا Emitting Events در Node.js

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

  1. یک بار اجرا کننده رویداد

بعضی اوقات ممکن است شما علاقه مند باشید فقط در اولین باری که رویداد اتفاق می افتد  واکنش نشان دهید. در این مواقع می توانید از روش ()once استفاده کنید. بیایید ببینیم که چگونه می توانیم از متد once  برای اجرای کننده ی رویداد استفاده کنیم.

Node js Streams Tutorial: Filestream, Pipes

توضیح کد:

  1. در اینجا ما از روش “once” استفاده می کنیم تا بگوییم که برای رویداد “data_received” ، تابع برگشتی فقط باید یک بار انجام شود.
  2. در اینجا ما به طور دستی رویداد “data_received” را شروع می کنیم.
  3. وقتی رویداد “data_received” دوباره شروع شود ، این بار هیچ اتفاقی نخواهد افتاد. این به دلیل اولین قدم است که در آنجا گفتیم که این رویداد فقط یک بار می تواند آغاز شود.

اگر کد به درستی اجرا شود ، خروجی موجود در کنسول با موفقیت “data_received” خواهد بود. این پیام فقط یک بار در کنسول ظاهر می شود.

  1. بازرسی شنوندگان رویداد

در هر نقطه از عمر خود ، یک پخش کننده رویداد می تواند صفر یا بیشتر شنوندگان داشته باشد که به آن متصل هستند. شنوندگان برای هر نوع رویداد می توانند از چند طریق مورد بازرسی قرار گیرند. اگر شما فقط می خواهید تعداد شنوندگان پیوست را تعیین کنید ، به دنبال روش  () EventEmitter.listenerCount نباشید.

(توجه: شنوندگان مهم هستند زیرا برنامه اصلی باید بداندکه آیا شنوندگان در پرواز به یک رویداد اضافه می شوند ، در غیر این صورت این برنامه با نقص کار می کند زیرا شنوندگان اضافی فراخوانی می شوند.)

Node js Streams Tutorial: Filestream, Pipes

 

توضیح کد:

  1. ما در حال تعریف یک نوع eventEmitter هستیم که برای استفاده از روش های مرتبط با رویداد لازم است.
  2. سپس ما در حال تعریف شیئی به نام emitter هستیم که برای تعریف کننده های رویداد ما استفاده می شود.
  3. ما در حال ایجاد 2 رویداد هستیم که اساساً هیچ کاری انجام نمی دهند. این فقط به عنوان مثال ساده برای نشان دادن نحوه عملکرد روش listenerCount می باشد.
  4. حال هنگامی که از رویداد listenerCount در رویداد data_received ما استفاده می کنید ، تعداد شنوندگان این رویداد را در پرونده کنسول ارسال می کنید.
  5. اگر کد به درستی اجرا شود ، مقدار 2 در کنسول نشان داده می شود.

       3. رویداد newListener

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

Node js Streams Tutorial: Filestream, Pipes

var events = require('events');
var eventEmitter = events.EventEmitter;
var emitter = new eventEmitter();
emitter.on("newListener", function(eventName, listener) {
    console.log("Added listener for " + eventName + " events");
});
emitter.on('data_received', function() {});
emitter.on('data_received', function() {});

توضیح کد:

  1. ما در حال ایجاد یک کنترل کننده ی رویداد جدید برای رویداد ‘newListener’ هستیم. بنابراین هر زمان که یک کنترل کننده رویداد جدید ثبت شود ، متن ” “Added listener for” + نام رویداد در کنسول نمایش داده می شود.
  2. در اینجا ما در حال نوشتن متن کنسول  “Added listener for ” + نام رویداد برای هر رویداد ثبت شده هستیم.
  3. ما در حال تعریف 2 عامل کنترل کننده رویداد برای رویداد “data_received” هستیم.

اگر کد بالا به درستی اجرا شود ، متن زیر در کنسول نشان داده می شود. فقط نشان می دهد که کنترل کننده رویداد “newListener” دو بار شروع  شده است.

شنوندگان برای رویدادهای data_received اضافه شدند.

شنوندگان برای رویدادهای data_received اضافه شدند.

خلاصه

  • جریان داده در Node.js برای خواندن و نوشتن داده ها از دستگاه های ورودی-خروجی استفاده می شود. Node.js از کتابخانه ‘fs’ برای ایجاد جریانهای قابل خواندن و نوشتاری در پرونده ها استفاده می کند. از این جریان ها می توان برای خواندن و نوشتن داده ها از پرونده ها استفاده کرد.
  • برای اتصال چندین جریان به هم می توان از pipes استفاده کرد. یکی از متداول ترین نمونه ها ، انتقال جریان خواندن و نوشتن به یکدیگر برای انتقال داده ها از یک پرونده به پرونده دیگر است.
  • Node.js اغلب به عنوان یک چارچوب رویداد محور نیز نشان داده می شود ، و تعریف رویدادها در Node.js. بسیار آسان است. توابع قابل تعریف هستند که به این رویدادها پاسخ می دهند.
  • رویدادها همچنین روش هایی برای پاسخ به رویدادهای کلیدی را در معرض نمایش قرار می دهند. به عنوان مثال ، ما شاهد کنترل رویداد () once هستیم که می تواند مورد استفاده قرار گیرد تا اطمینان حاصل شود که یک تابع برگشتی فقط یک بار در هنگام شروع یک رویداد انجام می شود.

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

 مثالی ساده از کال بک فانکشن

میخواهم تابعی ایجاد کنم که نتیجه ضرب 2 عدد را به من بدهد و سپس بتوانم با این نتیجه تابع دیگری را اجرا کنم. بنابراین:

function calc(val1,val2,cb){
    let result = val1*val2;
    return cb(result)
}

calc(5,6,function(result){
    console.log(result)
})

مثالی ساده از پرامیس Promise

const random = ()=>{
    return Promise.resolve(Math.random());
}

random().then(val=>{
    return val+5;
}).then(val=>{
    return Math.round(val)
}).then(val=>{
    console.log(val)
})
const showNum = Promise.resolve('56');

showNum.then(val=>console.log(val))
function calc(val1,val2){
    return val1*val2;
}

let exe = (val1,val2)=>{
    let p = new Promise((res:any,rej:any)=>{
        const result = calc(val1,val2);
        if(result){
            res(result)
        }else{
            rej('Problem on execut.')
        }
    })

    return p;
}

exe(5,6).then(res=>{
    console.log(res)
})

وقتی داده ها آماده نیستند و مقداری زمان برای آماده سازی آن ها نیاز است. یک پرامیس بازگشت میدهیم، پرامیس نیز قول میدهد که هرگاه داده مورد نظر ما آماده بود، اطلاع دهد.

مثالی ساده از async, await

const calc = (val:number)=>{
    return new Promise((res,rej)=>{
        res(val*5);
    })
}

const loger = async(num:number)=>{
    const result = await calc(num);
    console.log(result)
}

loger(2)

یکی از مزایای async و await اینه که await هر داده ای که به دستش برسه رو تحویل میده، اگه پرامیس باشه صبر میکنه که پرامیس وضعیتش تغییر کنه و کارش رو انجام بده و اگر هم پرامیس نباشه که داده رو همون موقع به صورت async تحویل میده. به نظر من دیگه از این بهتر نمیشه. انگار که نه انگار داری به صورت async با داده ها کار میکنی. واقعاً فوق العاده اس.

مثال فوق بدون پرامیس :

const calc = (val)=>{
    return val*5;
}

const loger = async(num)=>{
    const result = await calc(num);
    console.log(result)
}

loger(5)

توجه داشته باشید که هنوز هم میتوان به صورت زنجیره then به داده دسترسی داشت. به شرط اینکه درون تابع async نهایتاً از return استفاده کنیم. و داده را برگشت دهیم.

 

مثالی دیگر از Promise:

function getUser(id){
    return new Promise((res,rej)=>{
        res('database is ready---> user is: '+id)
    })
}
setTimeout(()=>{
    getUser(150).then(user=>{
        console.log(user);
    })
},2000)