ماژول های داخلی 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
Method | Description |
---|---|
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 |
isIP | Checks if the specified value is an IP address |
isIPv4 | Checks if the specified value is an IPv4 address |
isIPv6 | Checks 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')
یک ریپوسیتوری در گیتهاب برای تمام این کدها وجود دارد.