নোড.জেজে একটি ফাইল পড়ুন


186

আমি নোড.জেএস-তে ফাইলগুলি পড়তে বেশ আশ্চর্য হয়েছি।

fs.open('./start.html', 'r', function(err, fileToRead){
    if (!err){
        fs.readFile(fileToRead, {encoding: 'utf-8'}, function(err,data){
            if (!err){
            console.log('received data: ' + data);
            response.writeHead(200, {'Content-Type': 'text/html'});
            response.write(data);
            response.end();
            }else{
                console.log(err);
            }
        });
    }else{
        console.log(err);
    }
});

ফাইল start.htmlএকই ডিরেক্টরিতে ফাইল রয়েছে যা এটি খোলার এবং পড়ার চেষ্টা করে।

তবে কনসোলে আমি পেয়েছি:

{[ত্রুটি: ENOENT, খুলুন './start.html'] ত্রুটি: 34, কোড: 'ENOENT', পথ: './start.html'}

কোন ধারনা?


8
আপনার / কোড মনে করে যে ফাইলটি সেখানে রয়েছে এমন সম্ভাবনাগুলি ফাইল নয়। ফাইলটি যদি স্ক্রিপ্টের মতো একই ডিরেক্টরিতে থাকে তবে চেষ্টা করুন:path.join(__dirname, 'start.html')
— ডিসি 5

1
আপনি কি কনসোল.লগ করতে পারেন ("__ dirname:" + __dirname); আপনি ঠিক আগে আউটপুট ভুল? এই মুহূর্তে আপনার এক্সিকিউটেবলের জন্য কী ডিরেক্টরি স্থানীয় তা বলবে। আপনার অবস্থান পরিবর্তন করতে আপনি করতে পারেন এমন কিছু জিনিস রয়েছে এবং আপনি সম্ভবত এটি হিট করছেন, সম্ভবত কোডটি __dirname এ কাজ করছে না যেখানে আপনি মনে করেন এটি এটি।
— ব্রায়ান

ফাইলটি একই ডিরেক্টরিতে থাকা উচিত যা থেকে আপনি নোড প্রক্রিয়াটি চালান। সুতরাং ফাইলটি dir / নোড / সূচক html এ থাকে এবং আপনার অ্যাপ.জেএস ফাইলটি কিন্তু আপনি করেন: নোড /dir/node/app.js তবে আপনি একটি ত্রুটি পাবেন receive ডিসি 5 এর সমাধানটি কৌশলটি করা উচিত।
— ইভান শর্টিস

আপনার এই প্রশ্নটি বন্ধ করা উচিত, অথবা উত্তর হিসাবে আপনার সম্পাদনা সরবরাহ করা উচিত এবং তা গ্রহণ করা উচিত।
— ChrisCM

ব্যবহার করুন path.join(__dirname, '/filename.html')এবং স্ট্যাকওভারফ্লো.com
— পরেশ বড়দ

উত্তর:


237

ব্যবহার path.join(__dirname, '/start.html');

var fs = require('fs'),
    path = require('path'),    
    filePath = path.join(__dirname, 'start.html');

fs.readFile(filePath, {encoding: 'utf-8'}, function(err,data){
    if (!err) {
        console.log('received data: ' + data);
        response.writeHead(200, {'Content-Type': 'text/html'});
        response.write(data);
        response.end();
    } else {
        console.log(err);
    }
});

ধন্যবাদ ডিসি 5।


14
@ আরমকোচারিয়ান কখনও অ্যাসিঙ্ক কোডে * সিঙ্ক ফাংশন ব্যবহার করবেন না। ফাইলটি না পড়া পর্যন্ত এটি পুরো অ্যাপ্লিকেশনটিকে লক করে রাখবে। * সিঙ্ক ফাংশনগুলি অ্যাপ্লিকেশন শুরুতে যেমন মডিউল সিস্টেমে ব্যবহার করার জন্য ডিজাইন করা হয়েছে।
— ইউজিন কোস্ট্রিকভ

3
হ্যাঁ আমার ক্ষেত্রে এটি একটি গুরুতর কাজ ছিল।
— আরম কোচার্যান

2
আপনার কোডের নমুনাতে একটি টাইপ ত্রুটি রয়েছে, এটি আপনার path.joinঅকেজো, এর ,পরিবর্তে ব্যবহার করুন+
— ইয়ভেস এম

এই কোডটি আমার পক্ষে কাজ করছে বলে মনে হচ্ছে না, আমি এখনও একই ত্রুটি
— পেয়েছি

কেন এটি কেবল সরল সরু পথ ব্যবহার করে কাজ করে না ../someFolder/myFile.txt?
— মিগুয়েল পেরেস

42

নোড ০.০২ এর সাহায্যে এখন এটি সুসংগতভাবে করা সম্ভব:

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

  // Buffer mydata
  var BUFFER = bufferFile('../public/mydata.png');

  function bufferFile(relPath) {
    return fs.readFileSync(path.join(__dirname, relPath)); // zzzz....
  }

fsফাইল সিস্টেম। পঠনফিনসিঙ্ক () আপনি জিজ্ঞাসা করলে একটি বাফার বা স্ট্রিং প্রদান করে।

fsসঠিকভাবে ধরে নেওয়া যে আপেক্ষিক পাথগুলি একটি সুরক্ষা সমস্যা। pathএকটি কাজ প্রায়।

স্ট্রিং হিসাবে লোড করতে, এনকোডিং নির্দিষ্ট করুন:

return fs.readFileSync(path,{ encoding: 'utf8' });

5
*Syncওয়েবে প্রোগ্রামিং করার সময় কোনও পদ্ধতি ব্যবহার করবেন না । এগুলি কেবল গ্রান্ট / গাল্প কাজ, কনসোল অ্যাপ্লিকেশন ইত্যাদির জন্য উপযুক্ত They তারা পড়ার সময় পুরো প্রক্রিয়াটি বিরতি দেয়। ওপি-র কোডের উল্লেখ রয়েছে responseতাই এটি স্পষ্টতই একটি ওয়েব অ্যাপ্লিকেশন যেখানে readFileSyncউপযুক্ত নয়।
— স্যামুয়েল নেফ

3
অন্যান্য ব্যবহারের কেস রয়েছে কিনা তা বিবেচনা না করেই (এবং শুরুতে কোনও ক্যাশে ফাইল লোড করা অবশ্যই তাদের মধ্যে একটি নয়), ওপির পোস্টটি অবশ্যই আপনি যেখানে ব্যবহার করতে চান এমন কোনও ক্ষেত্রে নয় - readFileSyncএটি প্রক্রিয়াটির মাঝখানে রয়েছে একটি ওয়েব অনুরোধ। এই উত্তরটি হাতে থাকা প্রশ্নের পক্ষে সম্পূর্ণ অনুপযুক্ত ছিল।
— স্যামুয়েল নেফ

28

1)। এসিঙ্কের জন্য:

var fs = require('fs');
fs.readFile(process.cwd()+"\\text.txt", function(err,data)
            {
                if(err)
                    console.log(err)
                else
                    console.log(data.toString());
            });

2)। সিঙ্কের জন্য:

var fs = require('fs');
var path = process.cwd();
var buffer = fs.readFileSync(path + "\\text.txt");
console.log(buffer.toString());

3
process.cwd () এর পরিবর্তে আমি মনে করি আপনি __dirname পরিবর্তনশীল ব্যবহার করতে পারেন
— ইশিকাওয়া Yoshi

2
@ ইশিকাওয়াওশি process.cwd()হ'ল বর্তমান কার্যনির্বাহী ডিরেক্টরি এবং __dirnameবর্তমান মডিউলটির ডিরেক্টরি এটি তাই নয়।
— আরপুন

13

নোড সহ সহজ সিঙ্ক্রোনাস উপায়:

let fs = require('fs')

let filename = "your-file.something"

let content = fs.readFileSync(process.cwd() + "/" + filename).toString()

console.log(content)

9

এই কোডটি চালান, এটি ফাইল থেকে ডেটা এবং কনসোলে প্রদর্শন করবে

function fileread(filename)
{            
   var contents= fs.readFileSync(filename);
   return contents;
}        
var fs =require("fs");  // file system        
var data= fileread("abc.txt");
//module.exports.say =say;
//data.say();
console.log(data.toString());

5

httpমডিউলটি ব্যবহার করে সার্ভার থেকে এইচটিএমএল ফাইলটি পড়তে । সার্ভার থেকে ফাইলটি পড়ার এটি একটি উপায়। আপনি যদি এটি কনসোলে পেতে চান তবে কেবল httpমডিউল ঘোষণা বাতিল করুন।

var http = require('http');
var fs = require('fs');
var server = http.createServer(function(req, res) {
  fs.readFile('HTMLPage1.html', function(err, data) {
    if (!err) {
      res.writeHead(200, {
        'Content-Type': 'text/html'
      });
      res.write(data);
      res.end();
    } else {
      console.log('error');
    }
  });
});
server.listen(8000, function(req, res) {
  console.log('server listening to localhost 8000');
});
<html>

<body>
  <h1>My Header</h1>
  <p>My paragraph.</p>
</body>

</html>


উপরের কোডটি সার্ভারে এইচটিএমএল ফাইলটি পড়তে হয় y আপনি "HTTP" মডিউলটি ব্যবহার করে সার্ভারে এইচটিএমএল ফাইলটি পড়তে পারেন। এই সার্ভারে প্রতিক্রিয়া ফাইল উপায়। এটিকে কনসোলে আনতে আপনি "HTTP" মডিউলটিও সরাতে পারেন
— আদিত্য

1
ওহে, আপনি সম্পাদনা বোতামটি ক্লিক করে উত্তরে আপনার মন্তব্য অন্তর্ভুক্ত করতে চাইতে পারেন।
— গ্লেন ওয়াটসন

3

যদি আপনি কোনও ডিরেক্টরিতে কোনও ফাইল কীভাবে পড়তে চান এবং এটি দিয়ে কিছু করতে চান তবে আপনি এখানে যান। এটি আপনাকে কীভাবে একটি কমান্ড চালাবেন তাও দেখায় power shell। এই ভিতরে TypeScript! আমার এটি নিয়ে সমস্যা হয়েছিল, তাই আমি আশা করি এটি একদিন কাউকে সহায়তা করবে। আপনি যদি এটির ক্ষতিগ্রস্থ বলে মনে করেন তবে নির্দ্বিধায় আমাকে ভোট দিন। এটি আমার জন্য যা করেছিল তা ছিল webpackআমার .tsপ্রতিটি ডিরেক্টরিতে থাকা ফাইলগুলিকে একটি নির্দিষ্ট ফোল্ডারের মধ্যে স্থাপনার জন্য প্রস্তুত হওয়ার জন্য। আশা করি আপনি এটি ব্যবহার করতে পারেন!

import * as fs from 'fs';
let path = require('path');
let pathDir = '/path/to/myFolder';
const execSync = require('child_process').execSync;

let readInsideSrc = (error: any, files: any, fromPath: any) => {
    if (error) {
        console.error('Could not list the directory.', error);
        process.exit(1);
    }

    files.forEach((file: any, index: any) => {
        if (file.endsWith('.ts')) {
            //set the path and read the webpack.config.js file as text, replace path
            let config = fs.readFileSync('myFile.js', 'utf8');
            let fileName = file.replace('.ts', '');
            let replacedConfig = config.replace(/__placeholder/g, fileName);

            //write the changes to the file
            fs.writeFileSync('myFile.js', replacedConfig);

            //run the commands wanted
            const output = execSync('npm run scriptName', { encoding: 'utf-8' });
            console.log('OUTPUT:\n', output);

            //rewrite the original file back
            fs.writeFileSync('myFile.js', config);
        }
    });
};

// loop through all files in 'path'
let passToTest = (error: any, files: any) => {
    if (error) {
        console.error('Could not list the directory.', error);
        process.exit(1);
    }

    files.forEach(function (file: any, index: any) {
        let fromPath = path.join(pathDir, file);
        fs.stat(fromPath, function (error2: any, stat: any) {
            if (error2) {
                console.error('Error stating file.', error2);
                return;
            }

            if (stat.isDirectory()) {
                fs.readdir(fromPath, (error3: any, files1: any) => {
                    readInsideSrc(error3, files1, fromPath);
                });
            } else if (stat.isFile()) {
                //do nothing yet
            }

        });
    });
};

//run the bootstrap
fs.readdir(pathDir, passToTest);

2
var fs = require('fs');
var path = require('path');

exports.testDir = path.dirname(__filename);
exports.fixturesDir = path.join(exports.testDir, 'fixtures');
exports.libDir = path.join(exports.testDir, '../lib');
exports.tmpDir = path.join(exports.testDir, 'tmp');
exports.PORT = +process.env.NODE_COMMON_PORT || 12346;

// Read File
fs.readFile(exports.tmpDir+'/start.html', 'utf-8', function(err, content) {
  if (err) {
    got_error = true;
  } else {
    console.log('cat returned some content: ' + content);
    console.log('this shouldn\'t happen as the file doesn\'t exist...');
    //assert.equal(true, false);
  }
});
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.