تعریف node.js
یک پلتفرم بر پایه موتور جاوا اسکریپت گوگل کروم موسوم به V8 میباشد که باعث سهولت ایجاد و مقیاسپذیری برنامههای تحت شبکه میشود. این پلتفرم از یک مدل I/O رویداد محور استفاده میکند که مسدود نشونده (non-blocking) است و همین امر باعث کاهش فشار موجود بر روی سرور و افزایش کارآیی میشود و این امر برای اجرای برنامههای مبتنی بر داده که بصورت بلادرنگ (Real-Time) بر روی سرورهای نامتمرکز استفاده میشوند بسیار مناسب است. همچنین یک پلتفرم متن باز برای گسترش برنامههای سمت سرور و تحت شبکه میباشد. این پلتفرم بر اساس زبان جاوا اسکریپت نوشته شده است و قابلیت پیادهسازی بر روی سیستمعاملهای ویندوز، لینوکس و سیستم عامل کامپیوترهای اپل را دارد.
دستورات مختلف در node.js
در این بخش دستورات مورد استفاده در node.js را در سه سطح مبتدی، متوسط و پیشرفته نشان خواهیم داد.
سطح مبتدی
- نوشتن hello world
دستور کد زیر را در یک فایلی به نام “hello.js” مینویسیم.
12345var http = require('http'); http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/html'}); res.end('Hello World!'); }).listen(8080);
با دسترسی به پورت 8080 با استفاده از این لینک http://localhost:8080 قادر به دیدن hello word هستیم.
- درست کردن ماژول کاربر
ما میتونیم با کد زیر ماژول خود را درست کنیم
123exports.myDateTime = function () { return Date(); };
و حالا میتونیم از ماژول بالا در کدمون استفاده کرده و از طریق پورت 8080 دسترسی داشته باشیم.
1234567var http = require('http'); var dt = require('./myfirstmodule'); http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/html'}); res.write("The date and time are currently: " + dt.myDateTime()); res.end(); }).listen(8080);
Output: /summer
- درست کردن وب سرور
با استفاده از کد زیر میتونیم وب سرور در node.js درست کنیم
123456var http = require('http'); //create a server object: http.createServer(function (req, res) { res.write('Hello World!'); //write a response to the client res.end(); //end the response }).listen(8080); //the server object listens on port 8080
Output: /summer
- اضافه کردن HTTP هدر
ما باید هدر HTTP را زمانی که سرور میخواد محتوا را در فرمت HTML نشان دهد اضافه کنیم. سپس ما میتونیم از هدر HTTP برای محتوایی که نیاز داریم استفاده کنیم.
123456var http = require('http'); http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/html'}); res.write('Hello World!'); res.end(); }).listen(8080);
Output: /summer
- خواندن کوئری استرینگ
برای خواندن کوئری استرینگ در node.js ما نیاز به پیادهسازی کد زیر داریم
123456var http = require('http'); http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/html'}); res.write(req.url); res.end(); }).listen(8080);
- اسپلیت کوئری استرینگ
ما میتونیم با استفاده از ماژول URL کوئری استرینگ را در node.js اسپلیت کنیم.
12345678var http = require('http'); var url = require('url'); http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/html'}); var q = url.parse(req.url, true).query; var txt = q.year + " " + q.month; res.end(txt); }).listen(8080);</code
Output:
- خواندن یک فایل در node.js
ما میتونیم با استفاده از متد ()readFile یک فایل را در node.js بخوانیم.
123456789var http = require('http'); var fs = require('fs'); http.createServer(function (req, res) { fs.readFile('demofile1.html', function(err, data) { res.writeHead(200, {'Content-Type': 'text/html'}); res.write(data); res.end(); }); }).listen(8080);
Output:
- فایل خالی با استفاده از متد open
ما میتونیم با استفاده از متد open یک فایل خالی در node.js درست کنیم.
12345var fs = require('fs'); fs.open('mynewfile2.txt', 'w', function (err, file) { if (err) throw err; console.log('Saved!'); });
Output:
- به روز رسانی یک فایل موجود
به روز رسانی یک فایل در node.js در کد زیر نشان داده شده است
12345var fs = require('fs'); fs.appendFile('mynewfile1.txt', ' This is my text.', function (err) { if (err) throw err; console.log('Updated!'); });
Output:
- جایگزینی محتوای موجود در یک فایل
توسط متد ()writeFile میتونیم به این امر دست پیدا کنیم.
12345var fs = require('fs'); fs.writeFile('mynewfile3.txt', 'This is my text', function (err) { if (err) throw err; console.log('Replaced!'); });
Output:
سطح متوسط
- تریگر کردن یک گزارش در خطاهای بحرانی
ما میتونیم زمانی که خطای بحرانی یا Fatal Error رخ داد یک گزارش با استفاده از دستور زیر تریگر کنیم.
–diagnostic-report-on-fatalerror
دستور بالا این اجازه را به ما میدهد تا گرفتن گزارش را زمانی که خرابی رخ داد فعال کنیم و برنامه مربوطه را terminate کنیم تا خرابی را بررسی و اشکال یابی کنیم.
- استفاده از console class
استفاده از console class برای اشکال یابی در node.js (همانند JavaScript) میباشد و از ۳ متد ()console.log() ،console.error و ()console.warn بهره میبرد.
- درست کردن یک کنسول جدید در node.js
ما میتونیم یک کنسول جدید در node.js با دستور زیر درست کنیم.
12345const output = fs.createWriteStream('./stdout.log'); const errorOutput = fs.createWriteStream('./stderr.log'); const logger = new Console({ stdout: output, stderr: errorOutput }); const count =5; logger.log(‘count:%d’,count);
- استفاده از certificate class
ما میتونیم با استفاده از certificate class با کمک ماژول crypto با دیتا SPKAC کار کرده که بیشتر برای دستیابی به خروجی المان <keygen> در HTML استفاده میشود.
- یک instance جدید از certificate class
از طریق کد زیر قابلیت ایجاد یک instance جدید از certificate class هستیم.
123const crypto = require(‘crypto’); const cert1 = new crypto.Certificate(); const cert2 = crypto.Certificate();
سطح پیشرفته
- نحوه انتقال آرگومانها به تابع
از طریق کد زیر میتونیم آرگومانها را به تابع listener انتقال دهیم.
123456const myEmitter = new MyEmitter(); myEmitter.on('event', (a, b) => { console.log(a, b, this); // Prints: a b {} }); myEmitter.emit('event', 'a', 'b');
- اطلاعات مربوط به asynchronous و synchronous
در EventEmitter ،node.js تمامی شنوندگان رو بطور synchronously به ترتیبی که ثبت شدهاند صدا میزند و تابعهای گوش دهنده میتونن به حالت عملکرد asynchronous با استفاده از متدهای ()setlmmediate و یا ()process.nextTick در بیایند.
123456myEmitter.on('event', (a, b) => { setImmediate(() => { console.log('this happens asynchronously'); }); }); myEmitter.emit('event', 'a', 'b');