簡體   English   中英

列出帶有node.js的文件夾

[英]list folder with node.js

我是node.js的初學者,遇到了問題。 我想在帶有視圖ejs的列表中顯示文件名和最后修改日期。

但是,我的問題是將變量傳遞給我的視圖,我想用一個文件名和一個帶有日期的數組列表來填充一個數組,但是什么也沒有出現。

這是代碼:

  app.get('/', function (req, res) {
    res.setHeader('Content-Type', 'text/html');
    var filenameArray = [];
    var datefileArray = [];
    fs.readdir('./PDF/', function (err, files) {
        if (err) {
            throw err;
        }

        files.forEach(function (file) {
            fs.stat('./PDF/'+file, function (err, stats) {
                if (err) {
                    throw err;
                }

                // Fill in the array with filename and last date modification
                filenameArray.push(file);
                datefileArray.push(stats.mtime);
            });
        });
    });
    filenameArray.push("test");
    datefileArray.push("pouet");
    res.render('files.ejs', { filename: filenameArray, dateModification: datefileArray, index: filenameArray.length });
});

這是我的看法:

<p> <%= filename.length %></p>
<ul><%
    for(var i = 0 ; i <= index; i++) {
    %>
    <li><%= filename[i] + " - " + dateModification[i] %></li>
<% } %></ul>

我的陣列中只有測試項目。謝謝。

請記住:node.js是異步的,因此當您調用render ,它里面的fs.readdirfs.stat還沒有返回。

您可以使用async模塊來幫助您:

var async = require('async');

app.get('/', function (req, res) {
  res.setHeader('Content-Type', 'text/html');
  var filenameArray = [];
  var datefileArray = [];
  fs.readdir('./PDF/', function (err, files) {
      if (err) {
          throw err;
      }

      async.each(files, function (file, callback) {
          fs.stat('./PDF/'+file, function (err, stats) {
              if (err) {
                  throw err;
              }

              // Fill in the array with filename and last date modification
              filenameArray.push(file);
              datefileArray.push(stats.mtime);
              callback();
          });
      }, function (error) {
        if (error) return res.status(500).end();
        res.render('files.ejs', { filename: filenameArray, dateModification: datefileArray, index: filenameArray.length });
      });
  });
});

each函數將對數組中的每個項目執行迭代器回調,最后,當所有迭代器函數完成(或發生錯誤)時,它將調用最后一個回調。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM