node.js对于i in files render item

时间:2017-01-27 19:16:37

标签: node.js express

我想在不同的地方重复我的模板(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 });
        });

1 个答案:

答案 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;
  });