我正在使用 express 和 multer。下面的文件是随机顺序的。文件的顺序对于这个特定的请求很重要。如何从请求中获取原始订单?我需要的只是一组原始名称。
/* POST Put user items. */
router.post('/put', upload.array('useritem'), function (req, res, next) {
// req.files is always in a different order.
});
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'