var content;
fs.readFile('./Index.html', function read(err, data) {
if (err) {
throw err;
}
content = data;
});
console.log(content);
লগ undefined, কেন?
var content;
fs.readFile('./Index.html', function read(err, data) {
if (err) {
throw err;
}
content = data;
});
console.log(content);
লগ undefined, কেন?
উত্তর:
@ রায়নোস কী বলেছে তার বিশদটি জানাতে, আপনি যে ফাংশনটি সংজ্ঞায়িত করেছেন তা হ'ল অ্যাসিনক্রোনাস কলব্যাক। এটি এখনই কার্যকর করা হয় না, বরং ফাইল লোডিং শেষ হয়ে গেলে এটি কার্যকর করে। আপনি যখন রিডফাইলে কল করেন তখনই নিয়ন্ত্রণটি তত্ক্ষণাত ফিরিয়ে দেওয়া হয় এবং কোডের পরবর্তী লাইনটি কার্যকর করা হয়। সুতরাং আপনি যখন কনসোল.লগকে কল করবেন তখন আপনার কলব্যাকটি এখনও শুরু হয়নি এবং এই সামগ্রীটি এখনও সেট করা হয়নি। অ্যাসিক্রোনাস প্রোগ্রামিং এ আপনাকে স্বাগতম।
উদাহরণ পন্থা
const fs = require('fs');
// First I want to read the file
fs.readFile('./Index.html', function read(err, data) {
if (err) {
throw err;
}
const content = data;
// Invoke the next step here however you like
console.log(content); // Put all of the code here (not the best solution)
processFile(content); // Or put the next step in a function and invoke it
});
function processFile(content) {
console.log(content);
}
বা আরও ভাল, যেমন রায়নোস উদাহরণটি দেখায়, আপনার কলটি একটি ফাংশনে আবদ্ধ করুন এবং আপনার নিজের কলব্যাকগুলি পাস করুন। (আপাতদৃষ্টিতে এটি আরও ভাল অনুশীলন) আমি মনে করি যে কলসব্যাক গ্রহণ করে আপনার অ্যাসিঙ্ক কলগুলি ফাংশনে মোড়ানোর অভ্যাসে প্রবেশ করা আপনাকে অনেক ঝামেলা এবং অগোছালো কোড সংরক্ষণ করবে।
function doSomething (callback) {
// any async callback invokes callback with response
}
doSomething (function doSomethingAfter(err, result) {
// process the async result
});
'utf8'ফাইলের নামের পরে আপনাকে অতিরিক্ত প্যারামিটার হিসাবে অন্তর্ভুক্ত করতে হবে, অন্যথায় এটি কেবল বাফারটি ফিরিয়ে দেবে। দেখুন: stackoverflow.com/questions/9168737/...
এর জন্য আসলে একটি সিঙ্ক্রোনাস ফাংশন রয়েছে:
http://nodejs.org/api/fs.html#fs_fs_readfilesync_filename_encoding
fs.readFile(filename, [encoding], [callback])
অ্যাসিঙ্ক্রোনাসলি কোনও ফাইলের পুরো বিষয়বস্তু পড়ে। উদাহরণ:
fs.readFile('/etc/passwd', function (err, data) {
if (err) throw err;
console.log(data);
});
কলব্যাক দুটি আর্গুমেন্ট (ত্রুটি, ডেটা) পাস করেছে, যেখানে ডেটা ফাইলের বিষয়বস্তু।
যদি কোনও এনকোডিং নির্দিষ্ট না করা থাকে, তবে কাঁচা বাফারটি ফিরে আসবে।
fs.readFileSync(filename, [encoding])
Fs.readFile এর সিঙ্ক্রোনাস সংস্করণ। ফাইলের নামের ফাইলের বিষয়বস্তু ফেরত দেয়।
যদি এনকোডিং নির্দিষ্ট করা থাকে তবে এই ফাংশনটি একটি স্ট্রিং দেয়। অন্যথায় এটি একটি বাফার ফেরত দেয়।
var text = fs.readFileSync('test.md','utf8')
console.log (text)
data। if (Buffer.isBuffer( data){ result = data.toString('utf8'); }এখন আমরা বাফারটিকে পাঠযোগ্য পাঠ্যে রূপান্তরিত করেছি। এটি প্লেইন টেক্সট ফাইল পড়ার জন্য বা ফর্ম্যাট টাইপের বিপরীতে ফাইলটি পরীক্ষার জন্য ভাল। উদাহরণস্বরূপ এটি কোনও JSON ফাইল কিনা তা দেখার জন্য আমি চেষ্টা করে / ধরতে পারি; তবে কেবল বাফারটি পাঠ্যে রূপান্তরিত হওয়ার পরে। আরও তথ্যের জন্য এখানে দেখুন: nodejs.org/api/buffer.html
AF 42 F1। ক্লায়েন্ট-সার্ভার-ক্লায়েন্ট যোগাযোগের জন্য খুব ব্যবহারিক।
function readContent(callback) {
fs.readFile("./Index.html", function (err, content) {
if (err) return callback(err)
callback(null, content)
})
}
readContent(function (err, content) {
console.log(content)
})
function readContent(callback), callbackএকটি সংরক্ষিত শব্দ? মানে, আপনার কাস্টম ফাংশনগুলির জন্য কলব্যাকগুলি বাস্তবায়নের এটি কি আদর্শ উপায়? আমি সবেমাত্র নোড শিখতে শুরু করেছি।
eventবা cআপনার যে কোনও নাম হতে পারে - এটি জাভাস্ক্রিপ্টে কোনও সংরক্ষিত শব্দ নয় এবং আমি নোড.জেএস-তে একই প্রকারটি ধরে নেব I
readContent(function (err, content)প্যারামিটার হিসাবে ফাংশনটি ব্যবহার করার সময় আমাকে একটি সিনট্যাক্স ত্রুটি দেয়।
mzমডিউল কোর নোড লাইব্রেরির promisified সংস্করণ প্রদান করে। এগুলি ব্যবহার করা সহজ। প্রথমে পাঠাগারটি ইনস্টল করুন ...
npm install mz
তারপর ...
const fs = require('mz/fs');
fs.readFile('./Index.html').then(contents => console.log(contents))
.catch(err => console.error(err));
বিকল্পভাবে আপনি এগুলি অ্যাসিক্রোনাস ফাংশনে লিখতে পারেন:
async function myReadfile () {
try {
const file = await fs.readFile('./Index.html');
}
catch (err) { console.error( err ) }
};
এই লাইনটি কাজ করবে,
const content = fs.readFileSync('./Index.html', 'utf8');
console.log(content);
fs.readFileSyncসিঙ্ক পদ্ধতি, সুতরাং awaitসেখানে কোনও প্রয়োজন নেই। যখন আপনি সিঙ্ক কোডের মতো সিনট্যাক্স সহ অ্যাসিঙ্ক কোডটি লিখতে চান, তখন প্রতিশ্রুতিগুলি ( nodejs.org/api/fs.html#fs_fs_promises_api ) দিয়ে অপেক্ষা করা কার্যকর ।
const fs = require('fs')
function readDemo1(file1) {
return new Promise(function (resolve, reject) {
fs.readFile(file1, 'utf8', function (err, dataDemo1) {
if (err)
reject(err);
else
resolve(dataDemo1);
});
});
}
async function copyFile() {
try {
let dataDemo1 = await readDemo1('url')
dataDemo1 += '\n' + await readDemo1('url')
await writeDemo2(dataDemo1)
console.log(dataDemo1)
} catch (error) {
console.error(error);
}
}
copyFile();
function writeDemo2(dataDemo1) {
return new Promise(function(resolve, reject) {
fs.writeFile('text.txt', dataDemo1, 'utf8', function(err) {
if (err)
reject(err);
else
resolve("Promise Success!");
});
});
}
সিঙ্ক এবং async ফাইল পড়ার উপায়:
//fs module to read file in sync and async way
var fs = require('fs'),
filePath = './sample_files/sample_css.css';
// this for async way
/*fs.readFile(filePath, 'utf8', function (err, data) {
if (err) throw err;
console.log(data);
});*/
//this is sync way
var css = fs.readFileSync(filePath, 'utf8');
console.log(css);
নোড প্রতারণা পঠন-ফাইলে উপলভ্য ।
যেমনটি বলা হয়েছে, fs.readFileএকটি অ্যাসিনক্রোনাস অ্যাকশন। এর অর্থ হ'ল আপনি যখন নোডকে কোনও ফাইল পড়তে বলবেন তখন আপনাকে বিবেচনা করা দরকার যে এটি কিছুটা সময় নেবে এবং এর মধ্যে নোড নিম্নলিখিত কোডটি চালিয়ে যেতে থাকে। আপনার ক্ষেত্রে এটি আছে: console.log(content);।
এটি আপনার কোডের কিছু অংশ দীর্ঘ ভ্রমণের জন্য প্রেরণের মতো (বড় ফাইল পড়ার মতো)।
আমি যে মন্তব্য লিখেছি তা একবার দেখুন:
var content;
// node, go fetch this file. when you come back, please run this "read" callback function
fs.readFile('./Index.html', function read(err, data) {
if (err) {
throw err;
}
content = data;
});
// in the meantime, please continue and run this console.log
console.log(content);
এজন্য contentআপনি লগ ইন করার পরে এখনও খালি রয়েছে। নোড এখনও ফাইলের সামগ্রী পুনরুদ্ধার করতে পারেনি।
console.log(content)ঠিক পরে, কলব্যাক ফাংশনের ভিতরে গিয়ে সমাধান করা যেতে পারে content = data;। নোড ফাইলটি পড়ার পরে এবং contentকোনও মান পাওয়ার পরে আপনি লগটি দেখতে পাবেন ।
এই পুরানো কলব্যাক ফাংশনগুলিকে আরও মার্জিত করার জন্য বিল্ট ইন প্রমিসিফ লাইব্রেরি (নোড 8+) ব্যবহার করুন।
const fs = require('fs');
const util = require('util');
const readFile = util.promisify(fs.readFile);
async function doStuff() {
try {
const content = await readFile(filePath, 'utf8');
console.log(content);
} catch (e) {
console.error(e);
}
}
const doStuff = async (filePath) => fs.readFileSync(filePath, 'utf8');, ইউপ.প্রোমাইসাইফ মোড়কের দরকার নেই।
var fs = require('fs');
var path = (process.cwd()+"\\text.txt");
fs.readFile(path , function(err,data)
{
if(err)
console.log(err)
else
console.log(data.toString());
});
var content;
fs.readFile('./Index.html', function read(err, data) {
if (err) {
throw err;
}
content = data;
});
console.log(content);
এটি কেবল কারণ নোড অ্যাসিনক্রোনাস এবং এটি পঠন ফাংশনের জন্য অপেক্ষা করবে না এবং প্রোগ্রাম শুরু হওয়ার সাথে সাথে এটি মানটিকে অনির্ধারিত হিসাবে কনসোল করবে, যা আসলে সত্য কারণ বিষয়বস্তু ভেরিয়েবলের জন্য নির্ধারিত কোনও মান নেই। পরিচালনা করতে আমরা প্রতিশ্রুতি, জেনারেটর ইত্যাদি ব্যবহার করতে পারি আমরা এইভাবে প্রতিশ্রুতিটি ব্যবহার করতে পারি।
new Promise((resolve,reject)=>{
fs.readFile('./index.html','utf-8',(err, data)=>{
if (err) {
reject(err); // in the case of error, control flow goes to the catch block with the error occured.
}
else{
resolve(data); // in the case of success, control flow goes to the then block with the content of the file.
}
});
})
.then((data)=>{
console.log(data); // use your content of the file here (in this then).
})
.catch((err)=>{
throw err; // handle error here.
})
আপনি ফাইল পড়তে পারেন
var readMyFile = function(path, cb) {
fs.readFile(path, 'utf8', function(err, content) {
if (err) return cb(err, null);
cb(null, content);
});
};
যুক্ত করে আপনি ফাইল লিখতে পারেন,
var createMyFile = (path, data, cb) => {
fs.writeFile(path, data, function(err) {
if (err) return console.error(err);
cb();
});
};
এমনকি এটি একসাথে চেইন
var readFileAndConvertToSentence = function(path, callback) {
readMyFile(path, function(err, content) {
if (err) {
callback(err, null);
} else {
var sentence = content.split('\n').join(' ');
callback(null, sentence);
}
});
};
মোটামুটিভাবে বলতে গেলে, আপনি নোড.জেএস নিয়ে কাজ করছেন যা প্রকৃতির অ্যাসিনক্রোনাস।
আমরা যখন অ্যাসিঙ্ক সম্পর্কিত কথা বলি, তখন আমরা অন্য কোনও কিছুর সাথে কাজ করার সময় তথ্য বা ডেটা করা বা প্রক্রিয়াজাতকরণের বিষয়ে কথা বলি। এটি সমান্তরাল প্রতিশব্দ নয়, দয়া করে মনে করিয়ে দিন।
তোমার গোপন সংকেত:
var content;
fs.readFile('./Index.html', function read(err, data) {
if (err) {
throw err;
}
content = data;
});
console.log(content);
আপনার নমুনার সাহায্যে এটি মূলত কনসোল.লগ অংশটি প্রথমে করে, সুতরাং পরিবর্তনশীল 'সামগ্রী' অপরিবর্তিত।
আপনি যদি সত্যই আউটপুট চান, পরিবর্তে এর মতো কিছু করুন:
var content;
fs.readFile('./Index.html', function read(err, data) {
if (err) {
throw err;
}
content = data;
console.log(content);
});
এটি অ্যাসিক্রোনাস। এটি অভ্যাস করা কঠিন হবে তবে এটি এটিই। আবার, এটি অ্যাসিঙ্ক কী তা সম্পর্কে একটি মোটামুটি তবে দ্রুত ব্যাখ্যা।