-1

だから、私はNode.jsのlearnyounodeチュートリアルを進めています(これはかなり楽しいです)が、私はjavascriptに慣れています。要求の 1 つは、ディレクトリとファイル拡張子を引数として受け取り、指定された拡張子に一致するファイルを ls するプログラムをユーザーに作成させることです。

データが関数を介して渡されるさまざまな場所で引数をチェックする際に、組み込み関数のコールバック関数に追加の引数を渡すことができる Node.js を取得できません。

たとえば、次のスニペットを実行して、エラー、パス、拡張子を渡し、渡されたすべての引数を確認したいのですが、引数オブジェクトにはエラーとデータしか表示されず、"ext" 変数は無視されます。

var fs = require("fs"), path = require("path")
var dir = process.argv[2], ext = process.argv[3];

fs.readdir(dir, function (err, data, ext) {
  console.log(arguments);
  });

この機能が必要な理由は、ext の値を取得するために関数スコープを壊さないようにするためです。

カスタム関数でこの種のことを一日中行うことができますが、組み込み関数は少し寛容ではありません.

ありがとう、ボブ

4

2 に答える 2

0

irc で node.js の担当者と話をしたところ、javascript が動作する方法では、スコープを範囲内に保持する必要がないことがわかりました。Node.js はデフォルトで、モジュールを独自のクロージャーに配置するため、関数の外部で変数にアクセスでき、グローバル名前空間に干渉しません。

おそらく私の状況に最もよく一致するノードjsと変数スコープでこの回答を見つけましたが、質問を投稿したときに必要なものだとは知りませんでした。

また、Mozillaでいくつかの素敵なクロージャの例を見つけました。

個人的には、私はこれよりも JavaScript を少しよく知っていると思っていました。この回答が、C / PHP のバックグラウンドから node.js に移行する人々に役立つことを願っています。

于 2016-05-07T17:15:04.847 に答える
0

最も簡単な方法は、各エントリ名で組み込みpath.extname()関数を使用することです。

fs.readdir(dir, function(err, entries) {
  if (err) throw err;
  for (var i = 0; i < entries.length; ++i) {
    if (path.extname(entries[i]) === ext)
      console.log(entries[i]);
  }
});
于 2016-05-06T23:45:57.577 に答える