ماژول های داخلی Node.js Built-in Modules

ماژول ها در ند جی اس بسیار پرکاربرد هستند. همه آنها اینگونه فراخوانی میشوند:

const myModule = require('myModuleName')

لیست Built-in Modules

اگر میخواهید اطلاعات بیشتری از هر ماژول بدست آورید به سایت رسمی ند جی اس یا w3school مراجهخ کنید! با توجه به w3schools لیستی از ماژول های داخلی Node.js را اینجا مینویسم:

ماژول assert

یک نمونه استفاده:

var assert = require('assert');
assert(5 > 7);

یک نمونه استفاده دیگر با متد deepEqual :

assert.deepEqual([[[1, 2, 3]], 4, 5], [[[1, 2, '3']], 4, 5]);

ماژول buffer

var buf = Buffer.from('abc');
console.log(buf);
var buf = Buffer.alloc(15);

ماژول child_process

const { spawn } = require('child_process');
const ls = spawn('ls', ['-lh', '/usr']);

ls.stdout.on('data', (data) => {
  console.log(`stdout: ${data}`);
});

ls.stderr.on('data', (data) => {
  console.error(`stderr: ${data}`);
});

ls.on('close', (code) => {
  console.log(`child process exited with code ${code}`);
});

ماژول cluster

var cluster = require('cluster');

if (cluster.isWorker) {
  console.log('I am a worker');
} else {
  console.log('I am a master');
  cluster.fork();
  cluster.fork();
} 

ماژول crypto

var crypto = require('crypto');

var mykey = crypto.createCipher('aes-128-cbc', 'mypassword');
var mystr = mykey.update('abc', 'utf8', 'hex')
mystr += mykey.final('hex');

console.log(mystr); //34feb914c099df25794bf9ccb85bea72 

ماژول dgram

var dgram = require('dgram');
var s = dgram.createSocket('udp4');
s.on('message', function(msg, rinfo) {
  console.log('I got this message: ' + msg.toString());
});
s.bind(8080); 

ماژول dns

var dns = require('dns');
var w3 = dns.lookup('w3schools.com', function (err, addresses, family) {
  console.log(addresses);
}); 

ماژول events

var events = require('events');
var eventEmitter = new events.EventEmitter();

eventEmitter.on('scream', function() {
console.log('A scream is detected!');
});
eventEmitter.emit('scream'); 

ماژول fs

در ادامه این مقاله مثال writeFile آمده است.

ماژول http

در ادامه این مقاله مثال createServer آمده است.

ماژول https

شبیه http عمل میکند:

var https = require('https');

https.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.write('Hello World!');
  res.end();
}).listen(8080); 

ماژول net

MethodDescription
connect( )Creates a new connection to the server, and returns a new Socket
createConnection( )Creates a new connection to the server, and returns a new Socket
createServer( )Creates a new server
isIPChecks if the specified value is an IP address
isIPv4Checks if the specified value is an IPv4 address
isIPv6Checks if the specified value is an IPv6 address

ماژول os

اطلاعاتی درباره سیستم عامل کامپیوتر operation system (ویندوز لینوکس مکینتاش) ارائه میدهد.

var os = require('os');
console.log("Platform: " + os.platform());
console.log("Architecture: " + os.arch());

ماژول path

در پایین این مقاله نیز مثالی دیگر آمده است.

var path = require('path');
var filename = path.basename('/Users/Refsnes/demo_path.js');
console.log(filename);

ماژول querystring

var querystring = require('querystring');
var q = querystring.parse('year=2017&month=february');
console.log(q.year);

ماژول readline

یک نمونه استفاده: یک فایل را باز میکند و محتوایش را خط به خط بازمیگرداند.

var readline = require('readline');
var fs = require('fs');

var myInterface = readline.createInterface({
  input: fs.createReadStream('demofile1.html')
});

var lineno = 0;
myInterface.on('line', function (line) {
  lineno++;
  console.log('Line number ' + lineno + ': ' + line);
});

ماژول stream

بنظر میرسد مقوله پیچیده ای دارد. به چهار نوع تقسیم میشود: Writable, Readable, Duplex, Transform

ماژول string_decoder

// Decode a stream of binary data (a buffer object) into a string
var StringDecoder = require('string_decoder').StringDecoder;
var d = new StringDecoder('utf8');
var b = Buffer('abc');

console.log(b); //write buffer
console.log(d.write(b)); // write decoded buffer;

ماژول timers

اینجا از ماژول util هم استفاده شده است. بنظر میرسد ماژول تایمرز قرار نیست با require بیاید. همینجوری با setInterval و متد های دیگر استفاده میشود. این مقاله درباره آن نوشته شده است.

const util = require('util');
const setImmediatePromise = util.promisify(setImmediate);

setImmediatePromise('foobar').then((value) => {
  // value === 'foobar' (passing values is optional)
  // This is executed after all I/O callbacks.
});

// Or with async function
async function timerExample() {
  console.log('Before I/O callbacks');
  await setImmediatePromise();
  console.log('After I/O callbacks');
}
timerExample();

ماژول tls

connect( )Returns a Socket object
createSecureContext( )Creates an object containing security details
createServer( )Creates a Server object
getCiphers( )Returns an array containing the supported SSL ciphers

ماژول tty

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

const tty = require('tty');

ماژول url

در هنگام استفاده از اکسپرس بجای url از اکسپرس استفاده میکنیم.

var url = require('url');
var q = url.parse(req.url, true); // express.parse
console.log(q.href);

ماژول util

چند خط بالا یک مثال از util آوردیم.

var util = require('util');
var txt = 'Congratulate %s on his %dth birthday!';
var result = util.format(txt, 'Linus', 6);

console.log(result); 

ماژول v8

برای دسترسی به اطلاعات موتور جاوااسکریپت استفاده میشود.

ماژول vm

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

ماژول zlib

برای کمپرس کردن یا از کمپرس بیرون آوردن فایل ها استفاده میشود.

راه اندازی سرور با http.createServer (بدون express)

برای راه اندازی سرور در ند جی اس (بدون استفاده از فریمورک اکسپرس) میتوان از متد createServer در ماژول http استفاده کرد. مطابق کدهای زیر:

const http = require('http') 
  
const port = process.env.PORT || 5000; 

const server = http.createServer((req, res) => {
  res.statusCode = 200
  res.setHeader('Content-Type', 'text/html')
  res.end(`<p> سلام دنیا! </p>`)
})

server.listen(port , () => {
  console.log(`Server running at port ${port}`)
})

نوشتن فایل test.txt با ماژول fs

حالا میخواهیم با استفاده از سرور راه اندازی شده، یک فایل بنویسیم. نوشتن فایل یک event در بک اند (اینجا ند جی اس) محسوب میشود. کافیست از ماژول fs و متدش writeFile استفاده کنیم.

const http = require('http')
const fs = require('fs')
 
// part 1 - var
const content = 'Some content!'
const port = process.env.PORT || 5000;
var message = ''

// part 2 - fs.writeFile
fs.writeFile('Users/Shervin/Desktop/myapp/test.txt', content, err => {
  if (err) {
    message = JSON.stringify(err)
  }else{
    message = 'file written successfully'
  } 
})

// part 3 - http.createServer 
const server = http.createServer((req, res) => {
  res.statusCode = 200
  res.setHeader('Content-Type', 'text/html')
  res.end(`<p style="color: green"> Message: ${message}! </p>`)
})

server.listen(port , () => {
  console.log(`Server running at port ${port}`)
})

اجرای موفق

قبل از اجرای کدهای بالا ابتدا فایل test.txt را در فولدر myapp ایجاد کنید. درون فایل خالی باشد. پس از اجرای موفق در بروزر یک پیام موفقیت امیز نمایش داده شده و درون فایل test.txt نوشته زیر خواهد بود:

Some content!

اجرای ناموفق

اگر در Users/Shervin/… یک ادرس اشتباه بنویسید انگاه ارور با فرمت جیسون در بروزر نشان داده میشود. میتوانستیم ارور را در کنسول لاگ ( در ترمینال ) نمایش دهیم.

ادرس دهی با path

میخواهیم ادرس دهی Users/Shervin/… را بصورت داینامیک بنویسیم. از ماژول path استفاده میکنیم.

کافیست در بالای صفحه ماژول path را وارد پروژه کنیم:

const path = require('path')

سپس از متد join استفاده کنیم:

path.join(__dirname, '../' + '/test.txt')

این کد در فایل app.js نوشته میشود که در دایرکتوری myapp/server/app.js قرار دارد. ما در حال ادرس دهی test.txt هستیم که در مسیر myapp/text.txt قرار دارد. بنابراین در ادرس دهی relative باید با ../ یک پوشه به عقب برگردیم. بهمین دلیل قبل در کدهای بالا از آن استفاده کردیم.

اگر موقعیت مکانی test.txt در پوشه server بود انگاه از این کد هم میتوانستیم بهره ببریم:

path.resolve(__dirname + './test.js')

یک ریپوسیتوری در گیتهاب برای تمام این کدها وجود دارد.