【发布时间】:2015-06-09 15:28:58
【问题描述】:
我有一个在 nodejs 上运行的快速服务器。我有一个文件结构,我想将其转换为链接列表。我已经包含了我的递归文件结构函数。
文件结构函数
function fileTreeWrapper (root, callback) {
output = recursiveFileTree(root);
console.log(output);
callback();
}
function recursiveFileTree (root) {
fs.readdir('./' + root, function (err, files) {
if(err) throw err;
var structure = '';
var folders = '';
var tests = '';
structure += '<ul>';
for(var i in files) {
if(files[i].indexOf('.') === -1) {
folders += '<li id="folder">' + root + '/' + files[i] + '">' + files[i].charAt(0).toUpperCase() + files[i].slice(1);
folders += recursiveFileTree(root + '/' + files[i]);
folders += '</li>';
} else if (files[i].indexOf('.js') > -1) {
tests += '<li id="file"><a href="' + root + '/' + files[i] + '">' + files[i] + '</a></li>';
}
}
structure += folders;
structure += tests;
structure += '</ul>';
return structure;
});
}
我这样调用 router.get:
router.get('/', [function (req, res, next) {
fileTreeWrapper('rootFolder', function() {
next();
});
}, function (req, res) {
res.render('Files & Folders', {
title: 'Main',
localTitle: 'Choose a File',
result: output
}, function (err, html) {
if(err) throw err;
res.send(html);
res.end();
});
}]);
但是,当我运行此程序时,我的页面显示为空白。我的jade模板渲染是这样的:
h1= title
h3= localTitle
div !{result}
我是否不恰当地使用了 next() 回调?为什么这不起作用?
编辑:如果您要否决我的问题,请至少提供评论并说明原因。我是 SO 新手,这样做让我很生气。
【问题讨论】:
-
看起来你执行
callback太快了 -
另外,
output在您使用 console.log 时会返回您期望的结果吗?我希望它是未定义的。 -
是的,输出未定义。
-
@KevinB 当我这样称呼它时: router.get('/', [function (req, res, next) { recursiveFileTree('rootFolder'); next(); });它仍然做同样的事情。
-
您的递归函数几乎需要完全重写。你需要正确实现异步逻辑,fs.readdir是异步的。
标签: javascript node.js express next