2016-05-31 2 views
3

저는 NodeJS에 익숙하지 않다는 말로 시작 하겠지만 몇 년 동안 PHP로 개발 해왔다 (많이 아는 것은 아닙니다). fs vs JSON이 필요합니다.

는 최근 노드 땜질 시작하고 나는이 같은 oAuth keys 등을 설정하는 데 사용되는 .JSON 파일 끌어 파일 호출 local.js

누군가가 도움이 될 수 있습니다 희망 이상한 것을 발견했다.

I이었다에서이 파일을 뽑아 초기 방법 같은 :이 나에게 undefined

을 줄 것이라고 나는 settings.key를 통해 settings에서 JSON에서 값을 읽을 수 없습니다 것을 알게되었다 무엇

var fs = require('fs') 
var settings = fs.readFileSync('./config/settings.json', 'utf8') 

테스트 아웃

var settings = require('./config/settings.json') 

이하 다른 방법은 저 번째 행의 값을 읽을 수 있도록 e JSON via settings.key

왜 그런지 궁금한가요?

답변

6

fs.readFileSync()은 파일에 포함 된 데이터를 읽지 만 구문 분석하지 않습니다.

var settings = JSON.parse(fs.readFileSync('./config/settings.json', 'utf8')); 

require() 자동으로 데이터를 파싱 사용 :이 들어

, 당신은 추가 단계가 필요합니다.

+0

답장을 보내 주셔서 감사합니다. @robertklep 저는 이전에 어떤 시점에서 실제로'JSON.parse'를 사용 했었습니다. 이상한 오류가 발생 했었지만 어쩌면 뭔가 다른 것을 발견했습니다. Thanks again again :) –

+3

또한'require'를 사용하면'.json' 확장자를 생략 할 수 있고 파일 내용을 캐시 할 수 있습니다. 반면에 fs way는 여러 번 사용하면 파일을 다시 읽습니다. – Hyra

+1

@MattStephens 'JSON.parse'가 이상한 오류가 발생하면 json 스키마가 손상되었거나 문자열이 아니라 버퍼가 제공되지 않는 것 같습니다. –

0

Require은 매개 변수의 제공된 경로에서 모든 코드를 변수에 넣습니다. 첫 번째 경우에 require('fs')은 실제로 require('/some/path/fs.js')과 같은 약식이고 require.js은 변수 내에 해당 경로 (모듈)에 코드를 저장합니다. 이 모듈에는 readFileSync 메서드가 포함되어 있습니다. 물론 제공된 파일의 내용을 settings에 읽어들입니다. 이제 require은 JSON과 마찬가지로 작동합니다. 즉, require JSON 파일 인 경우 require.js은 변수를 구문 분석하여 기본 js 객체처럼 사용할 수 있습니다.

1

기능 fs.readFileSync()은 파일의 내용 만 문자열로 읽습니다.

require()은 파일의 내용을 읽고 해석하며 JSON.parse() 함수를 사용하여 구문 분석하므로 json 객체가 반환됩니다.

실행 사이에 json 파일을 수정하지 않는 경우 require()을 사용하는 것이 더 좋습니다.