如何检查目录是否为空?

时间:2018-07-16 10:02:21

标签: javascript node.js express

我将Node.js用于后端。我想检查目录是否为空,然后将任何响应发送给客户端,例如res.json('it is empty')res.sendStatus(404),否则执行某些操作...因为在我的客户端(Reactjs),我的应用程序一直在等待响应几分钟。

如果文件夹不为空且正常工作,Node.js会以JSON响应,但不会为空文件夹做出响应。

Nodejs:

var dirTree = ('./data/');

var diretoryTreeToObj = function(dir, done, res) {
  var results = [];

  fs.readdir(dir, function(err, list, res) {
    if (err)
      return done(err);

    var pending = list.length;

    if (!pending && pending !== 0)
      return done(null, {
        name: path.basename(dir),
        type: 'folder',
        children: results
      });

    list.forEach(function(file) {
      file = path.resolve(dir, file);
      fs.stat(file, function(err, stat) {
        if (stat && stat.isDirectory()) {
          let data2 = __dirname + dir + '/' + path.basename(file)
          let dirName = data2.split('\\').pop().split('/data/').pop()
          results.push({
            name: dirName,
            type: 'folder',
          });
          if (!--pending)
            done(null, results);
        } else {
          let data3 = __dirname + dir + '/' + path.basename(file)
          let contentName = data3.split('\\').pop().split('/data/').pop()
          results.push({
            name: contentName,
            type: 'file'
          });
          if (!--pending)
            done(null, results);
        }
      });
    });
  });
};

app.get('/source/:fileid(*)', (req, res) => {
  const {
    fileid
  } = req.params;
  var allFiles = __dirname + /data/ + fileid
  diretoryTreeToObj(allFiles, (err, getDirs) => {
    if (err) {
      res.sendStatus(404);
    } else {
      res.json(getDirs);
    }
  })
})

1 个答案:

答案 0 :(得分:0)

if条件应为:

if (!pending){
  return done(null, {
    name: path.basename(dir),
    type: 'folder',
    children: results
  });
}

检查以下内容: how to determine whether the directory is empty directory with nodejs