我想在不同的地方重复我的模板(twig)中的一些项目,其中每个重复的项目都响应不同目录中的文件名,所以首先我需要一个带有文件名的数组。 我不知道如何从功能上影响外部范围。这不起作用:
var files_list = {'json': [], 'js': []}
fs.readdir('./public/json', function(err, items) {
if (err) throw err;
files_list.json = items;
});
res.render('index', { js: files_list.js, jsons: files_list.json });
这样可行,但是如何再次渲染它以从另一个目录中获取内容。
fs.readdir('./public/json', function(err, items) {
if (err) throw err;
res.render('index', { jsons: items });
});
答案 0 :(得分:0)
这是一个你手边没有同步的变量;所以你应该以异步的方式对待它:
使用回调功能:
var getFiles = function(dir, cb) {
fs.readdir(dir, function(err, files) {
if (err) cb(err, null);
cb(null, files);
});
};
用法:
getFiles('./public/json', function(err, files) {
if (err) throw err;
res.render('index', { jsons: files });
});
<小时/> 或承诺:
var getFiles = function(dir) {
return new Promise(function(resolve, reject) {
fs.readdir(dir, function(err, files) {
if (err) reject(err);
resolve(files);
});
});
};
用法:
getFiles('./public/json')
.then(function(files) {
res.render('index', { jsons: files });
}, function(err) {
throw err;
});