2013-06-21 47 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

抱歉,只是想對此發表評論。我對azure上的node.js非常興奮,但對於我看到的與node.js中的linux和windows不兼容的問題感到失望。儘管開放源代碼,社區總體上傾向於Linux支持而不是Windows。我看到專門爲linux編碼的npms,或者有使用windows的注意事項。除了azure npm相關外,我沒有看到這種情況。 –

+0

感謝您的評論 - 我也一直在想這個問題。 Azure門戶網站是我見過的最好的網頁應用程序設計 - 絕對令人驚歎。 Dropbox集成非常簡單。我在這裏和那裏都遇到了一些問題,因爲它太棒了。 –

+0

是的,我同意你的觀點,並且是Azure的忠實粉絲。但是,通過Node.js,我決定採用純粹的Linux方法,這樣我就可以使用最好的NPM並且不用擔心了。 –

回答

1

這正是我用azure和Node.JS所遇到的問題。我在挖掘許多節點變量後發現的解決方案是使用__file。

作爲一個快速的方法來測試這一點,你可以添加到您的app.js是這樣的:

// global 
baseDir = __dirname; 

然後,你將不得不從任何地方這個全局變量訪問。即在路由器文件夾內。

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

__dirname總是返回當前文件的目錄名稱。如果你從根文件夾中的一個文件中定義一個具有這個值的變量,你將擁有應用程序的基礎文件夾。我已經實現了這一點,它的工作,我azure和heroku。

+1

這是正確的答案。使用'__dirname'確實更好,並且要明確路徑。我遇到了一個類似的問題,我在本地使用相對路徑,我的應用程序工作正常,但無法在Azure上找到具有相同相對路徑的相同文件。我改變它使用'path'模塊和'__dirname'並且它被解決了。謝謝,@guillem! –

相關問題