2014-10-09 2 views
4

이미 this question을 참조했습니다. 즉, 내 문제는 비동기의 오해에 있다고 믿지 않습니다.fs.readFile이 버퍼를 반환하는 이유는 무엇입니까?

다음은 내 모듈의 관련 부분입니다.

var fs = require('fs'); 
var q = require('q'); 
var u = require('../utils/json'); 

var indexFile = './data/index.json'; 

function getIndex() { 
    var def = q.defer(), 
     promise = def.promise, 
     obj; 

    fs.readFile(indexFile, function(err,data) { 
     if (err) { 
      throw err; 
      def.reject(err); 
     } 
     console.log('data', data); 

     def.resolve(obj); 
    }); 

    return promise; 
} 

'데이터'를 기록 할 때 해당 파일의 JSON 콘텐츠보다는 버퍼 (아래)가 표시됩니다.

<Buffer 5b 7b 22 68 65 6c 6c 6f 22 3a 22 77 6f 72 6c 64 22 7d 5d> 

이유에 대한 의견이 있으십니까?

+2

제쳐두고, 지연을 거부하려면 '오류'를 던지지 마십시오. – Andbdrew

+0

@Andbdrew 좋은 지적. 팁 고마워. –

+2

그리고 API가 문자열 대신 버퍼로 기본 설정되는 이유는 버퍼가 바이너리 데이터를 읽는 유일한 안전한 방법이라는 것입니다. 그러나 버퍼를 문자열로 변환하기 위해서는'.toString()'을 문자열 컨텍스트에 강제로 추가하기 만하면됩니다 :' ''+ buffer' – slebetman

답변

8

Node.js API docs for 'fs' module에 따라 encoding 옵션이 전달되지 않으면 함수가 버퍼를 반환합니다. 당신은 인코딩 값을 전달하면

, 그것은 그 인코딩 된 문자열을 반환합니다 전에 언급 한 바와 같이

fs.readFile('/etc/passwd', 'utf-8', callback)

1

이 시도 ... 당신은 인코딩을

fs.readFile(indexFile,'utf8', function(err,data) { 
    if (err) { 
     throw err; 
    } 
    //Do something with data 
    console.log(data); 
}); 
1

을 포함해야 , fs 모듈은 인코딩 옵션을 두 번째 매개 변수로 요구합니다.

또한 파일이 utf-8 문자열로 구성되었다고 확신하는 경우;

fs.readFile(indexFile, function(err,data) { 
    if (err) { 
     return def.reject(err); 
    } 

    console.log('data', data.toString()); 

    def.resolve(obj); 
}); 
관련 문제