我有从js到节点js返回的表单对象,在控制台中看起来像这样,
两个文件,
filenames : [object Object],[object Object] # filenames object for two files
length: 2 # used object.length
一个文件,
filenames : [object Object] # filenames object for one file
length: undefined # used object.length
我是Node js的新手,有人可以解释一下为什么这样吗?
被修改
ProfileController.js(客户端)
var fd = new FormData()
var filenames = $scope.postTextOrImageParams.imageUrl;
for( var i = 0; i < filenames.length; i++ ) {
fd.append("imageData",$scope.postTextOrImageParams.imageUrl[i]);
}
user.js(服务器端)
var filenames = req.files.imageData;
console.log(typeof filenames); //-> object
console.log('filenames : '+filenames);
console.log('length: '+filenames.length);
function uploader(i) {
if( i < filenames.length ) {
utils.saveMediaPic(filenames[i],function(error,savedImagePath){
if( error ) {
console.log('error: '+error)
}
else {
console.log("SAVED IMAGE ====>"+savedImagePath);
post.content.imageUrl.push(savedImagePath);
uploader(i+1)
}
});
}
答案 0 :(得分:1)
如果在体内有多个具有相同名称的参数,则bodyParser将生成一个数组。问题在于,当你只有一个参数时就不是这样了。
为了强制执行此操作,您可以在扩展版本中使用bodyParser。
app.use(bodyParser.urlencoded({ extended: true }));
并使用方括号imageData []
调用参数fd.append("imageData[]",...
您可以在文档http://npmjs.com/package/qs#readme
中找到这将触发扩展解析器始终返回一个数组。