Javascript 使用Node.js在dir中搜索文件

Javascript 使用Node.js在dir中搜索文件,javascript,node.js,gruntjs,Javascript,Node.js,Gruntjs,我目前正在尝试使用节点和grunt在Windows上的特定文件夹中搜索一些文件 我有一个grunt任务,它有一个读取带有JSON文件的dir的函数,但问题是,当我运行任务时,读取文件的代码没有做任何事情,该grunt任务上的所有其他内容都运行得很好,但这就是问题所在。我不确定路径的引用是否正确,但我也在使用path.normalize(),它不会引发任何错误 以下是代码片段: ..// Some other code var fs = require('fs'), path = require(

我目前正在尝试使用
节点
grunt
在Windows上的特定文件夹中搜索一些文件

我有一个
grunt任务
,它有一个读取带有
JSON
文件的dir的函数,但问题是,当我运行任务时,读取文件的代码没有做任何事情,该
grunt任务
上的所有其他内容都运行得很好,但这就是问题所在。我不确定路径的引用是否正确,但我也在使用
path.normalize()
,它不会引发任何错误

以下是代码片段:

..// Some other code
var fs = require('fs'),
path = require("path");

grunt.registerTask('separate', function() {
var filePath = path.normalize("C:\Users\jbernhardt\Desktop\testkeeper\jenkinsReports");

fs.readdir(filePath, function(err, filenames) {

  //This log doesn't show as it the function is not running
  grunt.log.writeln("Testing");

    if (err) {
        grunt.log.writeln("Error");
        return;
    }
    filenames.forEach(function(filename){
        grunt.log.writeln("Testing");

    });

  });
...//Some more code below for the same task
}

有人知道为什么在我运行任务时会跳过这段代码吗?我可能错过了一些基本的东西。谢谢

您需要更改路径

var filePath = path.normalize("C:\\Users\\jbernhardt\\Desktop\\testkeeper\\jenkinsReports");
另外,要在任何操作系统上使用Windows文件路径时获得一致的结果,请使用path.win32:

path.win32.basename('C:\\Users\\jbernhardt\\Desktop\\testkeeper\\jenkinsReports"');

您可以阅读有关

的信息,然后尝试
readdirSync
并检查您的函数是否仍然不工作。我猜您的进程在回调之前就完成了。

正在转义路径中的斜杠

"C:\\Users\\jbernhardt\\Desktop\\testkeeper\\jenkinsReports" 

应该可以解决您的问题。

您只需使用
\uu dirname
对象即可获取当前脚本运行的路径:

..// Some other code
var fs = require('fs'),
path = require("path");

grunt.registerTask('separate', function() {

fs.readdir(__dirname, function(err, filenames) {

  //This log doesn't show as it the function is not running
  grunt.log.writeln("Testing");

    if (err) {
        grunt.log.writeln("Error");
        return;
    }
    filenames.forEach(function(filename){
        grunt.log.writeln("Testing");

    });

  });
...//Some more code below for the same task
}

您可以找到更多信息。

您的前斜杠正在转义您的路径名Use“C:\\Users\\…”或“C:/Users/”似乎您是正确的,我尝试过了,并且它起作用了!,为了获得最佳实践,我将考虑阅读Async的替代方法。