2013-06-21 1 views
2

저는 Azure에 nodeJS 코드의 작동 비트를 배포했습니다. 그것은 FS 파일 라이브러리를 통해 템플릿에 당기 옥보기 엔진을 사용Microsoft Azure의 Node.JS에서 네이티브 'fs'파일 시스템을 사용할 수 있습니까?

function generateEmail(emailType, params, callback){ 
fs.readFile(__parentDir + '/emailTemplates/' + emailType + '.jade', 'utf8', function (err, data) { 
    var fn = jade.compile(data); 
    var body = fn({data: params, moment: moment}); //The data going in to the template 
    callback(body); 
}); 

}

그것은 내 Mac에서 로컬 잘 작동하지만, 푸른로부터 받았을 때 렌더링 된 이메일 템플릿은 <undefined></undefined>로 표시 전개. Azure에서 파일을로드하는 데 'fs'를 사용할 수 없으며 대신 BLOB를 사용해야 할 수도 있습니다.

Azure에서이 제한이 있습니까? 아니면 문제가이 fs.ReadFile 메소드와 관련이 없습니까?

온 전성 검사로서 Nodejitsu에 이것을 배치 했으므로 제대로 작동합니다.

감사합니다.

+1

죄송하지만이 문제에 대해 언급하고 싶습니다. 나는 푸른 하늘에 node.js에 대해 대단히 흥분했지만 node.js의 리눅스 및 윈도우와 호환되지 않는 것으로 보아서 실망했습니다. 일반적으로 커뮤니티는 오픈 소스이지만 창보다는 리눅스 지원에 기대고있다. 나는 리눅스 용으로 특별히 코딩 된 npms를 보거나 windows 사용시주의해야한다. 나는 이것과 관련된 azure npm을 제외하고는 다른 방법으로는 보지 못했다. –

+0

의견을 보내 주셔서 감사합니다. 저는이 같은 질문에 대해 궁금해하고 있습니다. Azure 포털은 필자가 보아온 최고의 웹 앱 디자인 중 일부입니다. Dropbox 통합은 매우 쉽습니다. 나는 그것이 아주 좋기 때문에 저를 여기 저기에 몰아 넣었습니다. –

+0

예, 귀하의 모든 사항에 동의하며 Azure의 팬입니다. 그러나 Node.js를 사용하면 순수한 리눅스 접근 방식을 채택하여 최고의 NPM을 사용할 수 있으며 걱정할 필요가 없습니다. –

답변

1

이것은 정확하게 내가 하늘과 노드에 대해 갖는 문제점이었습니다. 많은 노드 변수로 파기 한 후에 발견 한 해결책은 __file을 사용하는 것이 었습니다. 당신처럼 app.js 뭔가에 추가 할 수있는이 테스트 할 수있는 빠른 방법으로

:

// global 
baseDir = __dirname; 

은 그럼 당신은 어디에서이 전역 변수 접근 할 수있을 것입니다. 라우터 폴더 내부.

var defaultFile = path.join(baseDir, 'sample.txt'); 

__dirname 항상 현재 파일의 디렉토리 이름을 반환합니다. 루트 폴더에있는 파일에서이 값을 사용하여 변수를 정의하면 응용 프로그램 기본 폴더가 생깁니다.이 기능을 구현하면 하늘색과 영웅이 작동합니다.

+1

정답입니다. '__dirname'을 사용하고 경로를 명시 적으로 사용하는 것이 좋습니다. 비슷한 문제가 발생하여 로컬에서 상대 경로를 사용하고 앱이 예상대로 작동하지만 Azure에서 같은 상대 경로로 동일한 파일을 찾을 수 없습니다. 나는 그것을'path' 모듈과'__dirname'을 사용하도록 변경했으며 해결되었습니다. 고마워, @ guillem! –

관련 문제