我对在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);
    }
});

文件start.html与试图打开和读取它的文件在同一个目录中。

然而,在控制台,我得到:

{[错误:ENOENT,打开'./start.html'] errno: 34,代码:'ENOENT',路径:'./start.html'}

什么好主意吗?


当前回答

在Node 0.12中,现在可以同步执行此操作了:

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是文件系统。readFileSync()返回一个Buffer,如果你要求,也可以返回字符串。

Fs正确地假设相对路径是一个安全问题。路径是一种变通方法。

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

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

其他回答

简单的节点同步方式:

let fs = require('fs')

let filename = "your-file.something"

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

console.log(content)

1). 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).同步:

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

使用路径。加入(__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);
    }
});

感谢dc5。

在Node 0.12中,现在可以同步执行此操作了:

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是文件系统。readFileSync()返回一个Buffer,如果你要求,也可以返回字符串。

Fs正确地假设相对路径是一个安全问题。路径是一种变通方法。

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

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

运行这段代码,它将从文件中获取数据并显示在控制台

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