2017-09-17 8 views
1

私はnode.jsに新しく、モジュールの書き込み方法を理解して別のファイルで使用しようとしています。モジュールIO in nodejs

これは、ファイルの拡張子に従ってファイルをリストするために書いたモジュールです。

入力:ファイルのディレクトリと拡張子。

モジュール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.jsmodule_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); 
    }) 
}); 

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

コンソールに何も出力されません。

コードに何が間違っているか教えていただけますか?

ありがとうございます!

+1

コマンドライン引数を渡すときにnode.jsプロセスが実際に受け取っていることを理解するために 'console.log(process.argv)'を追加してみてください。 BashとCMDはシリアル化の一歩を踏み出します。これは、受信した値に予期しない動作を引き起こすことがあるため、バックスラッシュのような特殊文字を正しくエスケープしていることを確認してください。 –

+0

それは働いた。それは空白だけの問題でした。私は1時間かかって頭を切っていた。ありがとう! – Anamika

+0

あなたの最善の策は、問題を見つけるためにデバッグを使うことです: '--inspect-brk'オプションでスクリプトを起動します:' node --inspect-brk yourscriptjs'、次にChromeで 'chrome:// inspect'を実行し、リストからスクリプトを選択します。あなたはコードを一歩一歩踏み出すことができ、変数などを調べることができます。(V8.xにはそれがありますが、V6.xはありません) –

答えて

0

あなたのコードは、(コマンドラインから渡す拡張子を表す)フィルタ文字列の前に先頭のピリオドを追加します。

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

はしかし、あなたはまた、それを期に先行している拡張子を渡しています。

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

これは失敗しますれ、..ext(2リード期間)を一致させるために、コードの試みを行います。

0

さて、あなたはprocess.argvになってすることができるものを確認することができます[3]

は、さらにあなたが直面するであろう問題は、一部

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

であなたがチェックまたはの値を与えている必要がありますされますprocess.argv [3]の質問