0

我正在尝试使用jade和node.js在目录中列出一个文件,但我不确定下面是否是正确的做法,因为我收到一个类型错误,上面写着

Cannot read property 'length' of undefined

任何提示将不胜感激

h1 Your tasks
p


// list all the file
ul
  for file in files
    li
      p= file

node.js 代码

app.get('/tasks', function(req, res){


  fs.readdir('tasks/index', function(err, data){
    res.render('tasks/index', {"files": data});
  });

});

更新

app.get('/tasks', function(req, res){


  fs.readdir('tasks', function(err, data){
    res.render('tasks/index', {"files": data});
  });

});

错误

500 TypeError: /path/views/tasks/index.jade:7 5| // list all the file 6| ul > 7| each file in files 8| li 9| p= file 10| Cannot read property 'length' of undefined

    5| // list all the file
    6| ul
    > 7| each file in files
    8| li
    9| p= file
    10|
    Cannot read property 'length' of undefined
4

1 回答 1

2

好的,几个问题:

  1. 您需要使用each file in files而不是for
  2. 'tasks/index' 被视为目录和文件。它不能两者都是,它可能是一个文件,所以你的readDir调用可能会抛出一个错误,这就是为什么data(因此files)是未定义的。
  3. fs.readDir 将相对路径视为相对于 process.cwd 而 res.render 将相对路径视为相对于 express 的“视图”设置。
  4. 忽略第 3 步引发的错误只会让你的生活更加艰难,这就是为什么这是一个坏习惯。

fs.readdir(__dirname + '/views/tasks', function(error, data){
  if (error) {
      res.status(500).send(error);
      return;
  }
  res.render('tasks/index', {"files": data});
});

我不完全了解您的文件系统组织,因此路径只是猜测,但您的问题的根源似乎是文件系统组织方面的编码不正确。

于 2013-08-21T18:17:34.287 回答