nodejs load file

Javascriptnode.js

Javascript Problem Overview


I want to load test.txt with nodejs.

var fs = require('fs');
fs.readFile('./test.txt', function (err, data) {
  if (err) {
    throw err; 
  }
  console.log(data);
});

The path of the server is C:\server\test\server.js. The test.txt is located in the same directory, but I get this error: Error: ENOENT, no such file or directory 'C:\Users\User\test.txt'

Javascript Solutions


Solution 1 - Javascript

Paths in Node are resolved relatively to the current working directory. Prefix your path with __dirname to resolve the path to the location of your Node script.

var fs = require('fs');
fs.readFile( __dirname + '/test.txt', function (err, data) {
  if (err) {
    throw err; 
  }
  console.log(data.toString());
});

Solution 2 - Javascript

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('../test.txt');

  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 - Javascript

You should use __dirname to get the directory name the file is located instead of the current working directory:

fs.readFile(__dirname + "/test.txt", ...);

Solution 4 - Javascript

Use path and fs:

const fs = require("fs");
const pth = require("path");

Sync:

let data = fs.readFileSync(pth.join(__dirname,"file.txt"));
console.log(data + "");

A-Sync:

fs.readFile(pth.join(__dirname,"file.txt"), (err, data) => {
    console.log(data + "");
});

And that; If you need to read the file continuously and send it to the client and the file size is not large, you may be able to keep a copy of it:

const exp = require("express");
const app = exp();
const fs = require("fs");
const pth = require("path");

let file = "";
app.get("/file", (q, r) => {
    if (file === "")
        file = fs.readFileSync(pth.join(__dirname,"file.txt")) + "";

    r.writeHead(200, { "Content-Type": "text/plain" });
    r.write(file);
    r.end();
});

Solution 5 - Javascript

so if it is in the same directory just do this

 fs.readFile(__dirname+'/foo.txt',function(e,d){console.log(d)})

Solution 6 - Javascript

If it's in same directory it should work. I have tested with the same code, with a file name.txt and it's working fine:

var fs = require('fs');
fs.readFile('./test.txt', function (err, data) {
  if (err) {
    throw err;
  }
  console.log(data.toString());
});

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
QuestionDanny FoxView Question on Stackoverflow
Solution 1 - JavascriptRob WView Answer on Stackoverflow
Solution 2 - JavascriptMichael ColeView Answer on Stackoverflow
Solution 3 - JavascriptpimvdbView Answer on Stackoverflow
Solution 4 - JavascriptShamshirsaz.NavidView Answer on Stackoverflow
Solution 5 - JavascriptsamcconeView Answer on Stackoverflow
Solution 6 - JavascriptnirmalView Answer on Stackoverflow