在 Node.js 中读取文件

新手上路,请多包涵

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

有任何想法吗?

原文由 Eugene Kostrikov 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 903
2 个回答

使用 path.join(__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。

原文由 Eugene Kostrikov 发布,翻译遵循 CC BY-SA 3.0 许可协议

使用 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 正确地假设相对路径是一个安全问题。 path 是一种解决方法。

要作为字符串加载,请指定编码:

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

原文由 Michael Cole 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题