2016-05-08 8 views
0

私はres.write()メソッドにファイルを印刷したいwoudlが、私はエラーを取得:ノードhttp.writeメソッドにファイルを渡す方法は?

TypeError: First argument must be a string or Buffer 

マイコード:

var fs = require("fs"); 
var http = require("http"); 


http.createServer(function (req, res){ 

    res.write(getData()); 
    res.end(); 

}).listen(3333); 


function getData(){ 
    fs.readFile('testfs.txt', function(err, data){ 

     if(err) 
     { 
      console.log("Error: " + err); 
     }else { 
      console.log(data.toString()); 
      return data.toString(); 
     } 

    }); 
} 

問題は何ですか?

+0

を、あなたの関数の非同期をしなかったので、あなたはひどくなかったし、それが動作しない理由です。 – Nonemoticoner

+0

これを修正するには? – lukassz

+1

コールバックが必要です。私はちょっと答えを書くつもりです。 – Nonemoticoner

答えて

2

res.write関数getDataが非同期ではなかったため、文字列とバッファが取得されませんでした。ここにあなたの問題を解決することを望む修正があります。cb引数は明らかにコールバック関数です。

0

これは逆です。単にgetDataを呼び出して応答で渡し、ファイルがロードされたらresponse.end(string)を呼び出します。

2

また、あなたがstreams使用することができます。

const http = require('http'); 
const fs = require('fs'); 

http.createServer((req, res) => { 

    fs.createReadStream('testfs.txt') 
    .on('error', (e) => { 
     console.log('Error:', e); 
     res.statusCode = 500; 
     res.end(); 
    }) 
    .pipe(res) 


}).listen(3333); 
関連する問題