nodejs加载文件

时间:2012-03-27 13:28:29

标签: javascript node.js

我想用nodejs加载test.txt。

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

服务器的路径为C:\server\test\server.js。 test.txt位于同一目录中,但我收到此错误:Error: ENOENT, no such file or directory 'C:\Users\User\test.txt'

6 个答案:

答案 0 :(得分:64)

Node中的路径相对于当前工作目录进行解析。使用__dirname为您的路径添加前缀,以解析Node脚本位置的路径。

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

答案 1 :(得分:8)

使用Node 0.12,现在可以同步执行此操作:

  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是文件系统。如果你问的话,readFileSync()会返回一个Buffer或字符串。

fs正确地假设相对路径是安全问题。 path是一种解决方法。

要以字符串形式加载,请指定编码:

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

答案 2 :(得分:6)

您应该使用__dirname来获取文件所在的目录名 而不是当前的工作目录:

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

答案 3 :(得分:1)

所以如果它在同一个目录中就这样做

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

答案 4 :(得分:0)

如果它在同一目录中,它应该可以工作。我使用相同的代码进行了测试,文件为name.txt并且工作正常:

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

答案 5 :(得分:0)

使用pathfs

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

同步:

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

A同步:

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

那;如果您需要连续读取文件并将其发送给客户端并且文件大小不大,则可以保留该文件的副本:

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