【发布时间】:2018-12-23 20:22:32
【问题描述】:
我正在使用 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);
}
})
})
【问题讨论】:
-
你的 if 条件错误,试试这个 if (pending == 0)
-
@Dineshundefined 你能举个例子吗?
标签: javascript node.js express