Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Not works fs.readFile in node js

Tags:

file

node.js

fs

I have:

 fs.readFile('../services/Prescipcion.xml', "utf8", function (err, data) {
    console.log("err->", err);
    console.log("data", data);
 });

And it logs:

err-> { 
  [Error: ENOENT: no such file or directory, open '../services/Prescipcion.xml']
  errno: -2,
  code: 'ENOENT',
  syscall: 'open',
  path: '../services/Prescipcion.xml' 
}

I don't understand why this happens.

like image 538
oihi08 Avatar asked Oct 26 '15 10:10

oihi08


4 Answers

It worked for me

  var fs = require("fs");

    const readFIle = path => {
      fs.readFile(__dirname + path, "utf8", (err, data) => {
        if (err) {
          console.log(err.stack);
          return;
        }
        console.log(data.toString());
      });
      console.log("Program Ended");
    };

usage:

readFIle("/input.txt");

like image 42
Hitesh Sahu Avatar answered Nov 13 '22 04:11

Hitesh Sahu


The error message says no such file or directory, so at first sight this most likely means the path to the file is incorrect.

Either the filename is incorrect (typo?) or the directory is incorrectly resolved. Take note that a relative path will be resolved against process.cwd():

process.cwd(): Returns the current working directory of the process.

You can try using console.log(process.cwd()) to help you debug the issue.

If the file Prescipcion.xml should be retrieved locally from where the script is run, you can also use the following construct:

fs.readFileSync(path.join(__dirname, '../services') + '/Prescipcion.xml', 'utf8');

__dirname: The name of the directory that the currently executing script resides in.

like image 146
xaviert Avatar answered Nov 13 '22 04:11

xaviert


A full example that worked for me, based on other answer

var fs = require('fs');
var path = require('path');
var readStream = fs.createReadStream(path.join(__dirname, '../rooms') + '/rooms.txt', 'utf8');
let data = ''
readStream.on('data', function(chunk) {
    data += chunk;
}).on('end', function() {
    console.log(data);
});
like image 4
iamnotsam Avatar answered Nov 13 '22 05:11

iamnotsam


When passing data over from a Web App to an Express server, the fs root resides under the Web App directory and NOT the server's root directory. Therefore, the first writeFile parameter must point to a directory outside the server directory, or link over to the server file tree.

like image 3
Matthew Avatar answered Nov 13 '22 05:11

Matthew