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 回答