2013-07-10 27 views
0

我無法理解如何訪問Node.js Expresss Web應用程序中的本地文件。在Node.js中找不到文件

我想使用excel-parser包來讀取我放置在/ public/assets /中的文件,這應該在索引頁的加載時讀取。

所以我已經通過創建一個ExpressJS應用,並創造了我的index.js以下開始:

exports.index = function(req, res){ 
    var excelParser = require('excel-parser') 

    res.render('index', { title: 'Excel test' }); 

    excelParser.worksheets({ 
    inFile: '/assets/test_data.xlsx' 
    }, function(err, worksheets){ 
     if(err) console.error(err); 

     console.log('[INFO] Worksheet output: '); 
     console.log(worksheets); 
    }); 
}; 

在紐約控制檯,雖然我收到錯誤「找不到文件」和「工作表 '是未定義的。

我也曾嘗試用下面的路徑:

  • /公/資產...
  • __dirname + '/公/資產/ ......'
  • __dirname +「/資產/ ...'

所有提供相同的錯誤。

+0

經過文件的權限?根據文檔'__dirname', –

+0

實際上不是全局的,而是每個模塊的本地。所以這取決於你的索引文件在哪裏。 你可以'需要('路徑')'然後'path.join(__ dirname,'public/assets')'這是索引文件在公共目錄 –

回答

1

你需要獲取文件相對於你的應用程序根目錄。就像現在'/ assest'會試圖從你的驅動器的根目錄中獲取它。

可以在模塊得到主JS文件的根目錄下月初:

var path = require('path'); 
var root = path.dirname(require.main.filename); 

,然後使用它:

inFile: root + '/public/assets/test_data.xlsx' 
+0

謝謝,這導致我的解決方案。我還使用[fs.exists](http://nodejs.org/api/fs.html#fs_fs_exists_path_callback)來幫助我追蹤我正在調用實際存在的文件。 – Blaise