Read a file in Node.js

node.js

node.js Problem Overview


I'm quite puzzled with reading files in 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);
    }
});

File start.html is in the same directory with file that tries to open and read it.

However, in the console I get:

> { [Error: ENOENT, open './start.html'] errno: 34, code: 'ENOENT', path: './start.html' }

Any ideas?

node.js Solutions


Solution 1 - node.js

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

Thanks to dc5.

Solution 2 - node.js

With Node 0.12, it's possible to do this synchronously now:

  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 is the file system. readFileSync() returns a Buffer, or string if you ask.

fs correctly assumes relative paths are a security issue. path is a work-around.

To load as a string, specify the encoding:

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

Solution 3 - node.js

1).For ASync :

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

2).For Sync :

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

Solution 4 - node.js

simple synchronous way with node:

let fs = require('fs')

let filename = "your-file.something"

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

console.log(content)

Solution 5 - node.js

Run this code, it will fetch data from file and display in console

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

Solution 6 - node.js

To read the html file from server using http module. This is one way to read file from server. If you want to get it on console just remove http module declaration.

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>

Solution 7 - node.js

If you want to know how to read a file, within a directory, and do something with it, here you go. This also shows you how to run a command through the power shell. This is in TypeScript! I had trouble with this, so I hope this helps someone one day. Feel free to down vote me if you think its THAT unhelpful. What this did for me was webpack all of my .ts files in each of my directories within a certain folder to get ready for deployment. Hope you can put it to use!

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

Solution 8 - node.js

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionEugene KostrikovView Question on Stackoverflow
Solution 1 - node.jsEugene KostrikovView Answer on Stackoverflow
Solution 2 - node.jsMichael ColeView Answer on Stackoverflow
Solution 3 - node.jsMasoud SiahkaliView Answer on Stackoverflow
Solution 4 - node.jslocalhostdotdevView Answer on Stackoverflow
Solution 5 - node.jsGajender SinghView Answer on Stackoverflow
Solution 6 - node.jsAadityaView Answer on Stackoverflow
Solution 7 - node.jsSovietFrontierView Answer on Stackoverflow
Solution 8 - node.jsNikunj K.View Answer on Stackoverflow