2013-07-10 25 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