0

Expressとmulterを使用しています。以下のファイルは順不同です。ファイルの順序は、この特定の要求にとって重要です。リクエストから元の注文を取得するにはどうすればよいですか? 必要なのは元の名前の配列だけです。

/* POST Put user items. */
router.post('/put', upload.array('useritem'), function (req, res, next) {
    // req.files is always in a different order.
});
4

1 に答える 1

-3

Node配列のインデックス順序は保証されません。詳細については、この質問を参照してください: Nodejs プロパティの順序保証

強調して指摘したように、上記の私の発言は正しくありません。オブジェクトを JSON に変換し、それをリクエストのペイロードとして送信したことがある場合は、オブジェクトのプロパティの順序を中継してはならないというのが正しいステートメントです。JSON.stringify()

私の元のステートメントは明らかに正しくありませんが、これ私自身が遭遇した問題であり、サーバー上で配列値が間違った順序で表示され、以下の図のように解決しました。上記のコメントでのアミットの提案が問題の原因である可能性があります。具体的には、最初は期待どおりの順序でファイルを入力していないのは、クライアント側の JavaScript です。

原因が何であれ、クライアント側で「人工的な」インデックスを各ファイルに追加し、それらをオブジェクトの配列として渡す必要があります。

したがって、これの代わりに:

var files = ['file1.jpg','file2.jpg','file3.jpg'];

次のようにオブジェクトをバックエンドに渡す必要があります。

var files = [
  { index : 0, file : 'file1.jpg' },
  { index : 1, file : 'file2.jpg' },
  { index : 2, file : 'file3.jpg' },
];

そして、オブジェクトの配列をバックエンド インスタンスが受け取ったら、次のように並べ替える必要があります。

files.sort(function(a, b) {
    return a.index - b.index;
});

そして、files配列をループして、あなたが望むことをすることができます:

var justFiles = [];

async.each(files, function(file, iterate){
  justFiles.push(file.file);
  return iterate();
}, function(result){
    console.log(justFiles);
});

出力は次のようになります。

'file1.jpg','file2.jpg','file3.jpg'
于 2015-07-30T18:41:49.740 に答える