我想用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'
答案 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)
使用path
和fs
:
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();
});