将变量发送到nodeJs中的jade模板引擎(同步)

时间:2013-03-28 20:41:54

标签: node.js pug nodejitsu

我想调用Node.js中的函数,获取结果,然后将它们发送到模板。 results始终返回空。

怎么了?

var replace = req.params.replace || "";
var find = req.params.find;
var fs = require("fs");
var dir = "./public/sounds/";
var results = [];

var readFiles = function (root) {
    fs.readdir(root, function (err, files) {
        if (err) {
            console.log(err);
            return;
        }
        files.forEach(function (file) {
            console.log(root.concat(file));
            fs.stat(root.concat(file), function (err, stat) {
                if (stat && stat.isDirectory()) {
                    readFiles(root.concat(file + "/"));
                }
            });
            if (file.indexOf(find) > 0) {
                var oldPath = root.concat(file);
                var newPath = oldPath.replace(find, replace).trim();
                console.log("Old Path: ", oldPath, " New Path: ", newPath);
                fs.rename(oldPath, newPath);
                results.push(newPath);
            }
        })

    });
};
readFiles(dir);
res.jsonp({
    message: results
});

1 个答案:

答案 0 :(得分:0)

var results = [];
...some async stuff...
console.log(results);

每次都会打印空数组,所以如何修复。

简短回答:

var async = require('async');
async.each(files, function (file) { ... },
  function (error, results) { 
    res.jsonp({
      message: results
    });
  });

更长的答案,你的代码分支笨拙,所以它需要一些重组才能正常工作。

var async = require('async');
var replace = req.params.replace || "";
var find = req.params.find;
var fs = require("fs");
var dir = "./public/sounds/";


var readFiles = function (root, cb) {
    var results = [];
    fs.readdir(root, function (err, files) {
        if (err) {
            cb(err);
            return;
        }
        aync.each(file, function (file, cb) {
            console.log(root.concat(file));
            fs.stat(root.concat(file), function (err, stat) {
                if (err) {
                  return cb(err);
                }
                if (stat && stat.isDirectory()) {
                    readFiles(root.concat(file + "/"), function (err, res) {
                      results = results.concat(res);
                      cb(err);
                    });
                } else {
                    if (file.indexOf(find) > 0) {
                        var oldPath = root.concat(file);
                        var newPath = oldPath.replace(find, replace).trim();
                        console.log("Old Path: ", oldPath, " New Path: ", newPath);
                        fs.rename(oldPath, newPath);
                        results.push(newPath);
                    }
                    cb();
                }
            });

        }, function (err) {
            cb(err, results);
        });

    });
};
readFiles(dir, function (err, results) {
  res.jsonp({
    message: results
  });
});

我还没有测试过,所以如果您在调试时遇到问题请告诉我。