রুপান্তর
রূপান্তর স্ট্রিমগুলি উভয়ই পঠনযোগ্য এবং লিখনযোগ্য এবং এইভাবে সত্যিই ভাল 'মাঝারি' স্ট্রিম রয়েছে। এই কারণে, তাদের কখনও কখনও through
স্ট্রিম হিসাবে উল্লেখ করা হয়। তারা এইভাবে একটি দ্বৈত প্রবাহের অনুরূপ, কেবলমাত্র কেবল এটির মাধ্যমে প্রেরণ না করে ডেটা ম্যানিপুলেট করার জন্য একটি দুর্দান্ত ইন্টারফেস সরবরাহ করে। রূপান্তর স্ট্রিমের উদ্দেশ্য হ'ল তথ্যটি স্ট্রিমের মধ্য দিয়ে পাইপ করায় হেরফের করা। আপনি কিছু অ্যাসিঙ্ক কল করতে চাইতে পারেন, উদাহরণস্বরূপ, বা কয়েকটি ক্ষেত্র নেওয়া, কিছু জিনিস পুনর্নির্মাণ করা ইত্যাদি
কীভাবে একটি রূপান্তর স্ট্রিম তৈরি করতে হয় তা এখানে এবং এখানে দেখুন । আপনাকে যা করতে হবে তা হ'ল:
- স্ট্রিম মডিউলটি অন্তর্ভুক্ত করুন
- রূপান্তর বর্গ ইনস্ট্যান্টিয়েট (বা উত্তরাধিকারসূত্রে)
- একটি
_transform
পদ্ধতি প্রয়োগ করে যা গ্রহণ করে a (chunk, encoding, callback)
।
খণ্ডটি হ'ল আপনার ডেটা। আপনি যদি কাজ করে থাকেন তবে বেশিরভাগ সময় আপনাকে এনকোডিং সম্পর্কে চিন্তা করতে হবে না objectMode = true
। কলঙ্কব্যাকটি ডাকা হয় যখন আপনি খণ্ডটি প্রক্রিয়াজাতকরণ শেষ করেন। এই অংশটিকে পরবর্তী স্ট্রিমের দিকে ঠেলে দেওয়া হয়।
আপনি যদি এমন কোনও দুর্দান্ত সহায়ক মডিউল চান যা আপনাকে সত্যই সহজেই প্রবাহের মাধ্যমে করতে সক্ষম করে, আমি পরামর্শ দিয়েছি 2 ।
ত্রুটি পরিচালনা করার জন্য, পড়া চালিয়ে যান।
নল
একটি পাইপ চেইনে, হ্যান্ডলিং ত্রুটিগুলি আসলে তুচ্ছ নয়। এই থ্রেড অনুসারে। পাইপ () ত্রুটিগুলি ফরোয়ার্ড করার জন্য নির্মিত হয় না। এরকম কিছু ...
var a = createStream();
a.pipe(b).pipe(c).on('error', function(e){handleError(e)});
... কেবল স্ট্রিমের ত্রুটিগুলি শুনবে c
। যদি কোনও ত্রুটির ঘটনাটি নির্গত হয় a
, তবে এটি পাস হবে না এবং প্রকৃতপক্ষে নিক্ষেপ করবে। এটি সঠিকভাবে করতে:
var a = createStream();
a.on('error', function(e){handleError(e)})
.pipe(b)
.on('error', function(e){handleError(e)})
.pipe(c)
.on('error', function(e){handleError(e)});
এখন, যদিও দ্বিতীয় উপায়টি আরও ভার্বোজ, আপনি কমপক্ষে আপনার ত্রুটিগুলি কোথায় ঘটবে সে প্রসঙ্গে রাখতে পারেন। এটি সাধারণত একটি ভাল জিনিস।
এক গ্রন্থাগার আমি সহায়ক যদিও এটি আপনি একটি কেস আছে যেখানে আপনি শুধুমাত্র গন্তব্যে ত্রুটি ক্যাপচার করতে চান এবং আপনি এত সম্পর্কে যেখানে এটা ঘটেছে গ্রাহ্য না হয় না ঘটনা-স্ট্রীম ।
শেষ
যখন কোনও ত্রুটি ইভেন্টটি বরখাস্ত করা হয়, শেষ ইভেন্টটি বহিস্কার করা হবে না (স্পষ্টভাবে)। ত্রুটি ইভেন্টের নির্গমন প্রবাহকে শেষ করবে।
ডোমেইনের
আমার অভিজ্ঞতায়, ডোমেনগুলি বেশিরভাগ সময় সত্যই ভাল কাজ করে। আপনার যদি একটি অপ্রচলিত ত্রুটি ইভেন্ট থাকে (অর্থাত শ্রোতা ব্যতীত কোনও স্ট্রিমে ত্রুটি নির্গত করে), সার্ভারটি ক্রাশ করতে পারে। এখন, উপরোক্ত নিবন্ধটি হিসাবে উল্লেখ করা হয়েছে, আপনি কোনও ডোমেনে স্ট্রিমটি মোড়ানো করতে পারেন যা সমস্ত ত্রুটি সঠিকভাবে ধরা উচিত।
var d = domain.create();
d.on('error', handleAllErrors);
d.run(function() {
fs.createReadStream(tarball)
.pipe(gzip.Gunzip())
.pipe(tar.Extract({ path: targetPath }))
.on('close', cb);
});
ডোমেনগুলির সৌন্দর্য হ'ল তারা স্ট্যাকের চিহ্নগুলি সংরক্ষণ করবে। যদিও ইভেন্ট-স্ট্রিম এটির একটি ভাল কাজ করে।
আরও পড়ার জন্য, স্ট্রিম-হ্যান্ডবুকটি দেখুন । গভীরতায় অত্যন্ত, তবে সুপার দরকারী এবং প্রচুর সহায়ক মডিউলগুলিতে কিছু দুর্দান্ত লিঙ্ক দেয়।
Promise
ফ্রেমওয়ার্কগুলি এটিকে অনেক সহজ করে