【问题标题】:module IO in nodejsnodejs中的模块IO
【发布时间】:2017-09-17 08:12:05
【问题描述】:

我是node.js 的新手,正在尝试弄清楚如何编写模块并在另一个文件中使用它。

这是我写的根据文件扩展名列出文件的模块。

输入:文件的目录和扩展名。

模块module_import.js

var fs = require('fs')
var path = require('path')

module.exports = function (dir, filterStr, callback) {
  fs.readdir(dir, function (err, list) {
    if (err) {
      return callback(err)
    }

    list = list.filter(function (file) {
      return path.extname(file) === '.' + filterStr
    })

    callback(null, list)
  })
}

module.js(已导入module_import.js的文件。)

var filterfile = require('./module_import.js');
var dir = process.argv[2];
var ext = process.argv[3];

 filterfile(dir,ext,function(err,list){
    if(err){
        return console.log(err);
    }
    list.forEach(function(file){
        console.log(file);
    })
 });

当我通过这个 command 在控制台上运行它时:node module.js \dir\path\to\files .ext

我在控制台上没有得到任何输出。

谁能告诉我代码有什么问题?

谢谢!

【问题讨论】:

  • 尝试添加 console.log(process.argv) 以帮助确定 node.js 进程在您传递命令行参数时实际接收的内容。 Bash 和 CMD 执行序列化步骤,有时会导致您最终收到的值出现意外行为,因此请确保您正确转义了反斜杠等特殊字符。
  • 成功了。这只是空格的问题。从一个小时开始,我一直在努力。谢谢!
  • 最好的办法是使用调试来找出问题所在:使用 --inspect-brk 选项启动脚本:node --inspect-brk yourscriptjs,然后在 Chrome 中转到 chrome://inspect 并从中选择脚本名单。您现在可以单步执行代码、检查变量等。(您需要一个相当新的 Node 版本。V8.x 有,V6.x 没有。)
  • @T.J.Crowder 这真的很酷!不知道,有时间我去试试

标签: javascript node.js


【解决方案1】:

您的代码在过滤字符串之前添加了一个前导句点(表示您从命令行传递的扩展名):

return path.extname(file) === '.' + filterStr
                              ^^^

但是,您还传递了一个以句点开头的扩展名:

node module.js \dir\path\to\files .ext
                                  ^

这将使代码尝试匹配..ext(两个前导句点),这将失败。

【讨论】:

    【解决方案2】:

    你能检查一下你在 process.argv[3] 中得到了什么

    此外,您将面临的问题是零件

      list = list.filter(function (file) {
          return path.extname(file) === '.' + filterStr
        });
    

    您必须在问题中检查或给出了 process.argv[3] 的值

    【讨论】:

      猜你喜欢
      • 2023-03-24
      • 2017-10-27
      • 2016-06-27
      • 2018-10-06
      • 1970-01-01
      • 2023-02-14
      • 2014-06-06
      • 2013-06-18
      • 2014-06-29
      相关资源
      最近更新 更多