如何在请求中获取文件的原始顺序?

时间:2015-07-30 18:22:50

标签: node.js express multer

我正在使用快递和闷热。在下文中,文件是随机顺序的。文件的顺序对于此特定请求很重要。如何从请求中获取原始订单?我只需要一系列原始名称。

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

1 个答案:

答案 0 :(得分:-3)

Node不保证数组的索引顺序。有关详细信息,请参阅此问题:Nodejs Order of properties guarantee

正如强调指出的那样,我上面的陈述是不正确的。正确的说法是,如果您使用JSON.stringify()将对象转换为JSON然后将其作为a的有效负载发送,则不应在对象中按属性的顺序进行中继请求。

虽然我的原始陈述显然是不正确的,但 是我遇到的一个问题 - 我的服务器上的数组值显示错误 - 我解决了它,如下图所示。阿米特在上述评论中的建议可能是问题的根源。特别是它是你的客户端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'