از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
بسته های مفید Node که ممکن است در مورد آنها ندانید برخی از شما کهنه سربازان Node احتمالاً قبلاً در مورد تعدادی از این بسته ها شنیده اید، اما امیدوارم از این مقاله برخی از موارد واقعا مفید را پیدا کنید که هرگز مانند من در مورد آنها نشنیده اید. . من معمولا فراموش می کنم که بسته های زیادی وجود دارد، بنابراین برخی از آنها را انجام دادم …
سرفصلهای مطلب
معرفی
برخی از شما کهنهکاران Node احتمالاً قبلاً نام تعدادی از این بستهها را شنیدهاید، اما امیدوارم از این مقاله موارد بسیار مفیدی را پیدا کنید که مانند من هرگز نام آنها را نشنیدهاید. من معمولا فراموش می کنم که بسته های زیادی وجود دارد، بنابراین کاوش کردم و با تعدادی از آنها بازی کردم. اینها تعدادی از موارد مورد علاقه من هستند.
یارگ ها
را yargs
بسته ساده و سرراست است و شما را از نوشتن کد صفحه دیگ در تمام پروژه هایتان نجات می دهد. این آرگومانهای خط فرمان را برای شما مدیریت میکند، بنابراین کاربر میتواند پرچمها را تنظیم کند و هر نوع دادهای از جمله بولی، اعداد ممیز شناور و رشتهها را وارد کند.
yargs
حتی خروجی “مصرف” شما را کنترل می کند، بنابراین می توانید به راحتی به کاربر بگویید که برنامه شما کدام گزینه را انتخاب می کند، از جمله اینکه کدام گزینه مورد نیاز است.
var argv = require('yargs')
.usage('Usage: $0 -x (num) -y (num)')
.demand(('x','y'))
.argv;
console.log('Pow(x, y):', Math.pow(argv.x, argv.y));
بنابراین با استفاده از کد بالا، اگر سعی کردیم اسکریپت را با just اجرا کنیم node index.js -x 3
، سپس این پیام را دریافت می کنیم:
Usage: index.js -x (num) -y (num)
Options:
-x (required)
-y (required)
Missing required argument: y
yargs
به اندازه کافی خوب است که به ما بگوید دقیقاً چه چیزی را در یک پیام با قالب بندی زیبا از دست داده ایم، و تنها کاری که باید انجام می دادیم استفاده از این پیام ساده بود. .usage()
و .demand()
مواد و روش ها. تقریباً هر بسته ای می تواند از این استفاده کند.
بیش از حد شلوغ
این یکی از آن بسته هایی بود که مسلماً در ابتدا خیلی تحت تأثیر آن قرار نگرفتم، اما به سرعت متوجه شدم که چقدر می تواند مفید باشد.
با نظرسنجی حلقه رویداد Node کار میکند و «تاخیر» را ردیابی میکند، یعنی زمانی که برای برآورده شدن درخواستها طول میکشد. اگر تاخیر بیش از حد طولانی شود، پس toobusy
به شما اطلاع می دهد و به شما امکان می دهد کد HTTP 503 “Service Unavailable” را به مشتری برگردانید.
این مهم است زیرا هر چه سرور شما شلوغ تر شود، زمان انتظار طولانی تر می شود. این به سرعت به یک مشکل مرکب تبدیل می شود که با گذشت زمان بدتر می شود روی. اگر کاری انجام ندهید، سرویس برای همه خاموش می شود (معروف به خرابی). اما اگر پردازش را زودتر متوقف کنید تا HTTP 503 را بازگردانید، حداقل برخی از درخواستها سرویس میشوند. برخی بهتر از هیچ، درست است؟
شما می توانید استفاده کنید toobusy
با نصب آن:
npm install toobusy
و سپس آن را با چیزی مانند Express ادغام کنید:
var toobusy = require('toobusy'),
express = require('express');
var app = express();
// Block requests if we get too busy
app.use(function(req, res, next) {
if (toobusy()) {
res.send(503, "Too many users!");
} else {
next();
}
});
var server = app.listen(3000);
process.روی('SIGINT', function() {
server.close();
toobusy.shutdown(); // Allow us to exit normally
process.exit();
});
این واقعاً به کد زیادی نیاز ندارد، و حتی پیکربندی کمتری هم نمیگیرد، بنابراین میتوانید به راحتی آن را در یک میانافزار خوب بستهبندی کنید و آن را در تمام پروژههای Express خود بگنجانید. فقط مطمئن شوید که هیچ درخواست مهمی را که اولویت بالایی دارند یا درخواست هایی که حاوی داده های حیاتی هستند را قطع نمی کنید.
گچ
پسندیدن toobusy
، من واقعاً متوجه مفید بودن آن نشدم chalk
تا اینکه واقعاً کمی وقت گذاشتم تا در مورد آن و جایی که دیده ام استفاده شده است فکر کنم. رابط های کاربری روی ایجاد خط فرمان بسیار سخت است زیرا تنها چیزی که باید با کاربر در تعامل باشید پنجره ای برای نمایش متن و یک ورودی متن واحد است. بنابراین چگونه می توانید اطلاعات مهم را به دست آورید؟ یکی از بهترین راه ها اضافه کردن قالب بندی به متن است. Express یک مثال خوب برای این موضوع است. از خروجی آنها می توانید به راحتی مهم ترین اطلاعات را بلافاصله پیدا کنید، بنابراین هرگز چیز مهمی را از دست نخواهید داد.
در اینجا لیست کاملی از انواع مختلف یک ظاهر طراحی شده است chalk
پشتیبانی می کند:
اصلاح کننده ها
bold
underline
dim
reset
hidden
inverse
italic
(در همه جا پشتیبانی نمی شود)strikethrough
(در همه جا پشتیبانی نمی شود)
رنگ ها
red
black
green
white
yellow
blue
(روی ویندوز یک نسخه روشن تر استفاده می شود زیرا آبی معمولی ناخوانا است)cyan
gray
magenta
رنگ های پس زمینه
bgBlue
bgBlack
bgRed
bgGreen
bgCyan
bgYellow
bgWhite
bgMagenta
در حالی که اینها تنها رنگ هایی هستند که به طور رسمی پشتیبانی می شوند، هر رنگ سازگار با xterm terminal می توانید از کدهای رنگی کامل 8 بیتی استفاده کنید.
برای قالب بندی برخی از متن ها، فقط باید رشته را از یک تابع برای رنگ آمیزی یا قالب بندی عبور دهید. بنابراین، اگر میخواهید کاربر یک خطای بحرانی را ببیند، ممکن است بخواهید قالببندی مانند زیر را اضافه کنید:
var chalk = require('chalk');
var str = chalk.red.bold('ERROR: ') + chalk.bold('Everything just blew up...');
console.log(str);
node-بازرس
پیدا کردن اشکالزدای خوب، بهویژه آنهایی که رابط کاربری گرافیکی دارند، کار سختی است، به همین دلیل است که من از طرفداران زیادی هستم. node-بازرس. این دیباگر با نشان دادن وب به شما کار می کند page رابط کاربری گرافیکی برای رفع اشکال کد شما. تمام ویژگیهای یک اشکالزدای استاندارد، مانند نقاط شکست، ورود و خروج کد، و بازرسی متغیر را دارد. همچنین دارای برخی ویژگیهای نه چندان رایج است که واقعاً مفید هستند، مانند CPU و پروفایل heap، بازرسی درخواست مشتری شبکه، و امکان ویرایش زنده کدهای در حال اجرا. این آخرین ویژگی یکی از موارد مورد علاقه من است زیرا در زمان شما صرفه جویی می کند.
توجه داشته باشید که Node Inspector فقط با کروم و اپرا سازگار است زیرا از ابزار برنامهنویس Blink استفاده میکند، که رابط اشکالزدایی جاوا اسکریپت است که میبینید و با Node سازگار است.
برای مدت طولانی به شدت متکی بودم روی با استفاده از console برای خروجی اطلاعات اشکال زدایی من، که در نهایت زمان زیادی برای افزودن، ویرایش و حذف عبارات اشکال زدایی من صرف شد. استفاده از رابط کاربری گرافیکی به معنای واقعی کلمه باعث صرفه جویی در زمان رفع اشکال شده است. اکنون، دیباگرها چیز جدیدی نیستند، اما استفاده از برخی از آنها بسیار دشوارتر از سایرین است، و این روش خوبی است.
terminal-کیت
اگر برنامه Node شما از خط فرمان برای چیزی بیشتر از ورودی/خروجی متن ساده استفاده میکند، احتمالاً باید از آن استفاده کنید terminal-کیت. terminal-کیت بسیاری از جنبه های تعامل با کاربران را ساده می کند تا بتوانید تمرکز کنید روی ساختن چیزهای مهم در برنامه شما. چند چیز terminal-کیت عبارتند از:
- استایل متن (بسیار شبیه
chalk
) - در حال ویرایش صفحه نمایش
- نوارهای پیشرفت
- ورودی کاربر
موارد استفاده زیادی وجود دارد که برای آنها کاربرد دارد terminal-کیت برای مثال، اگر چیزی را از اینترنت دانلود میکنید، نشان دادن نوار پیشرفت به کاربر مفید خواهد بود تا بدانند برنامه بهتازگی متوقف نشده است. برای نمایش نوار پیشرفت ساختگی، فقط باید کاری شبیه به این انجام دهید:
var terminal = require( 'terminal-kit' ).terminal;
var progressBar;
var progress = 0;
function updateProgress() {
// Add random progress
progress += Math.random() / 10;
progressBar.update(progress);
// Check if we're done
if (progress >= 1) {
setTimeout(function() {
terminal('\n');
process.exit();
}, 250);
}
else {
setTimeout(updateProgress, 100 + Math.random() * 500);
}
}
progressBar = terminal.progressBar({
width: 80,
title: 'Downloading file:',
eta: true,
percent: true
});
updateProgress();
کد بالا چیزی شبیه به این را تولید می کند که از کد گرفته شده است terminal-کیت README:
تایید کننده
را validator
بسته به تعدادی از اعتبارسنجی رشته های رایج (مانند آدرس های ایمیل، کارت های اعتباری، آدرس های IP و غیره) کمک می کند. بسته ای مانند این برای زمانی که از یک کاربر ورودی دریافت می کنید ضروری است. تقریباً می توانید کاربر خود را بزرگترین تهدید برای محصول خود تصور کنید. آنها اشتباه میکنند و چیزهای واقعاً عجیب و غریبی را در جعبههای متن وارد میکنند، بنابراین شما به یک بسته اثباتشده برای اعتبارسنجی ورودی برای شما و جلوگیری از خراب شدن دادهها یا خرابی سرور نیاز دارید.
چند مورد از مفیدترین اعتباردهنده ها عبارتند از:
isEmail(str (, options))
isIP(str (, version))
isMobilePhone(str, locale)
isURL(str (, options))
validator
همچنین دارای ضدعفونیکنندههایی است که میتوانند رشتههای ورودی شما را عادی، حذف یا فرار کنند. برای مثال، ممکن است بخواهید نظر یک کاربر را پاکسازی کنید تا از وارد کردن HTML/JavaScript مخرب جلوگیری کنید. این یکی از رایج ترین موارد استفاده است، زیرا برای مهاجم بسیار آسان است که یک ربات ایجاد کند تا این حمله را برای آنها آزمایش کند. روی هزاران سایت
برخی از ضدعفونی کننده های مفید ارائه شده توسط validator
هستند:
blacklist(input, chars)
escape(input)
normalizeEmail(email (, options))
whitelist(input, chars)
را normalizeEmail()
روش جالبی است این اطمینان حاصل می کند که یک آدرس ایمیل کوچک است و حتی کاراکترهای نادیده گرفته شده را از نام کاربری آدرس های GMail حذف می کند. بنابراین، اگر ایمیل را داشتید (email protected)
، normalizeEmail()
آن را عادی خواهد کرد (email protected)
از آنجایی که GMail نقاط را نادیده می گیرد (.
) و برچسب ها.
مهیب
یکی از سختترین کارهایی که در گذشته با آنها برخورد کردهام، مدیریت آپلود فایلها بوده است، به همین دلیل است formidable
لیست را ساخته است. formidable
هر قسمت از آپلود را مدیریت می کند، از جمله تجزیه کننده چند قسمتی، نوشتن فایل ها روی دیسک، و رسیدگی به خطاها. اگرچه بسیاری از برنامههای وب به کاربر اجازه آپلود تصاویر و ویدیوهای بزرگ را نمیدهند، بسیاری از آنها به عکسهای نمایه اجازه میدهند، به این معنی که باید عکس را دریافت کنید، آن را تأیید کنید و آن را روی دیسک بنویسید، که بسته به این ممکن است کار آسانی نباشد. روی محدودیت های شما
این یکی از آن بستههایی است که من از طرفداران آن هستم زیرا واقعاً نمیخواهم چرخ را دوباره اختراع کنم. این یک کار را انجام می دهد و آن را واقعاً خوب انجام می دهد.
در اینجا یک مثال با استفاده از formidable
فقط با یک سرور HTTP ساده، اصلاح شده از مثالی که در خود بسته ارائه شده است:
var http = require('http');
var util = require('util');
var formidable = require('formidable');
var path = require('path');
var PORT = 8080;
var root = path.join(__dirname, '../');
exports.dir = {
root : root,
lib : root + '/lib',
fixture : root + '/test/fixture',
tmp : root + '/test/tmp',
};
var server = http.createServer(function(req, res) {
if (req.url == '/') {
res.writeHead(200, {'content-type': 'text/html'});
res.end(
'<form action="/post" method="post">' +
'<input type="text" name="title"><br>' +
'<input type="text" name="data(foo)()"><br>' +
'<input type="submit" value="Submit">' +
'</form>'
);
} else if (req.url == '/post') {
var form = new formidable.IncomingForm(),
fields = ();
form
.روی('error', function(err) {
res.writeHead(200, {'content-type': 'text/plain'});
res.end('error:\n\n' + util.inspect(err));
})
.روی('field', function(field, value) {
console.log(field, value);
fields.push((field, value));
})
.روی('end', function() {
console.log('-> post done');
res.writeHead(200, {'content-type': 'text/plain'});
res.end('received fields:\n\n ' + util.inspect(fields));
});
form.parse(req);
} else {
res.writeHead(404, {'content-type': 'text/plain'});
res.end('404');
}
});
server.listen(PORT);
console.log('listening روی http://localhost:' + PORT + '/');
shelljs
shelljs
بسته ای است که به شما امکان می دهد از دستورات رایج یونیکس استفاده کنید روی هر سیستمی، خواه ویندوز، لینوکس یا مک باشد. به این ترتیب شما نیازی به نوشتن هر دو ندارید bash و اسکریپت های دسته ای برای پروژه های شما shelljs
محیطی شبیه به یونیکس را برای کار کردن در اختیار شما قرار می دهد، بنابراین اگر اسکریپت هایی برای اجرای تست ها می نویسید، تغییرات را انجام دهید یا راه اندازی کنید. روی یک سرور، فقط یک بار باید آن را بنویسید.
شما می توانید کارهایی مانند عمل انجام دهید روی خروجی فرمان:
require('shelljs/global');
ls('*.js').forEach(function(file) {
sed('-i', 'BUILD_VERSION', 'v2.0.3', file);
sed('-i', /.*REMOVE_THIS_LINE.*\n/, '', file);
sed('-i', /.*REPLACE_THIS_LINE.*\n/, cat('macro.js'), file);
});
اجرای دستورات رایج:
require('shelljs/global');
mkdir('-p', 'release/data');
cp('-R', 'data/*', 'release/data');
باینری های موجود را بررسی کنید:
require('shelljs/global');
if (!which('git')) {
echo('This script requires git!');
exit(1);
}
و حتی دستورات بومی را مانند حالت واقعی اجرا کنید bash/دسته اسکریپت:
if (exec('git commit -am "Release commit"').code !== 0) {
echo('Error: Git commit failed!');
exit(1);
}
نتیجه
امیدواریم از این مقاله ابزارهای مفیدی پیدا کرده باشید که هرگز در مورد آنها نشنیده اید، یا شاید متوجه شده باشید که برخی از این بسته ها چقدر می توانند مفید باشند. یک جستجوی سریع یا فقط مرور برخی از پروژه های منبع باز می تواند به نتایج خوبی منجر شود، بنابراین چشمان خود را باز نگه دارید. 190000+ (از 10/1/15) بسته وجود دارد روی npmjs.com، بنابراین هر چیزی که به دنبال آن هستید احتمالاً وجود دارد.
بسته “ناشناخته” مورد علاقه شما چیست؟ در نظرات به ما اطلاع دهید!
(برچسبها برای ترجمه)# جاوا اسکریپت
منتشر شده در 1403-03-10 06:09:06