Node.js में एक फ़ाइल पढ़ें


186

मैं Node.js. में पढ़ने वाली फाइलों से काफी हैरान हूँ

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')
dc5

1
क्या आप सांत्वना दे सकते हैं। ("__ dirname:" + __dirname); सही से पहले तुम उत्पादन? यह बताएगा कि उस समय आपके निष्पादन योग्य के लिए कौन सी निर्देशिका स्थानीय है। ऐसी चीजें हैं जो आप अपना स्थान बदलने के लिए कर सकते हैं और शायद आप उसे मार रहे हैं, शायद कोड __dirname पर काम नहीं कर रहा है जहां आपको लगता है कि यह है।
ब्रायन

फ़ाइल को उसी निर्देशिका में होना चाहिए जिसे आप नोड प्रक्रिया से चलाते हैं। इसलिए यदि फ़ाइल dir / node / index.html में है और आपकी app.js फ़ाइल है, लेकिन आप करते हैं: नोड / dir/node/app.js तब आपको एक त्रुटि मिलती है। dc5 के समाधान को चाल करना चाहिए।
इवान शॉर्टिस

आपको इस प्रश्न को बंद करना चाहिए, या उत्तर के रूप में अपने संपादन की आपूर्ति करनी चाहिए और इसे स्वीकार करना चाहिए।
क्रिसकैम

उपयोग करें path.join(__dirname, '/filename.html')और stackoverflow.com/a/56110874/4701635
परेश बरद

जवाबों:


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);
    }
});

Dc5 के लिए धन्यवाद।


14
@AramKocharyan कभी भी Async कोड में * सिंक कार्यों का उपयोग न करें। यह पूरी ऐप को तब तक लॉक करेगा जब तक फाइल पढ़ी नहीं जाती। * सिंक फ़ंक्शंस को ऐप स्टार्ट अप, जैसे कि मॉड्यूल सिस्टम में उपयोग करने के लिए डिज़ाइन किया गया है।
यूजीन कोस्ट्रिकोव

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फाइल सिस्टम है। readFileSync () यदि आप पूछें तो एक बफर, या स्ट्रिंग लौटाता है।

fsसही तरीके से मान लिया गया कि रिश्तेदार मार्ग एक सुरक्षा मुद्दा है। pathएक काम है।

एक स्ट्रिंग के रूप में लोड करने के लिए, एन्कोडिंग निर्दिष्ट करें:

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

5
*Syncवेब के लिए प्रोग्रामिंग करते समय किसी भी तरीके का उपयोग न करें । ये केवल ग्रन्ट / गल्प टास्क, कंसोल एप्स आदि के लिए उपयुक्त हैं। वे पढ़ते समय पूरी प्रक्रिया को रोक देते हैं। ओपी का कोड संदर्भित करता है responseइसलिए यह स्पष्ट रूप से एक वेब ऐप है जहां readFileSyncउपयुक्त नहीं है।
सैमुअल नेफ

3
भले ही अन्य उपयोग के मामले हों या नहीं (और स्टार्ट-अप पर कैश को लोड करना फ़ाइलें निश्चित रूप से उनमें से एक नहीं है), ओपी का पद निश्चित रूप से ऐसा मामला नहीं है जहां आप readFileSyncप्रसंस्करण के बीच में --he का उपयोग करना चाहते हैं एक वेब अनुरोध यह जवाब हाथ में लिए सवाल के पूरी तरह से अनुचित था।
सैमुअल नेफ

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 वैरिएबल का उपयोग कर सकते हैं
इशिकावा योशी

2
@IshikawaYoshi process.cwd()वर्तमान कार्यशील निर्देशिका है और __dirnameवर्तमान मॉड्यूल की निर्देशिका है, इसलिए वे समान नहीं हैं।
A1PPun

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मॉड्यूल का उपयोग कर सर्वर से HTML फ़ाइल को पढ़ने के लिए । यह सर्वर से फाइल पढ़ने का एक तरीका है। यदि आप इसे कंसोल पर लाना चाहते हैं तो 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>


उपरोक्त कोड सर्वर पर html फ़ाइल को पढ़ने के लिए है। आप "http" मॉड्यूल का उपयोग करके सर्वर बनाकर, सर्वर पर HTML फ़ाइल पढ़ सकते हैं। यह सर्वर पर प्रतिक्रिया फ़ाइल का तरीका है। आप कंसोल पर पाने के लिए "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);
  }
});
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.