220

私は 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' }

何か案は?

4

8 に答える 8

53

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()は、必要に応じてバッファまたは文字列を返します。

fs相対パスがセキュリティ上の問題であると正しく想定しています。 path回避策です。

文字列としてロードするには、エンコーディングを指定します。

return fs.readFileSync(path,{ encoding: 'utf8' });
于 2015-04-26T04:10:08.647 に答える
35

1).非同期の場合:

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());
于 2016-10-23T07:21:14.470 に答える