【问题标题】:array length in node.jsnode.js 中的数组长度
【发布时间】:2015-09-05 02:22:20
【问题描述】:

我有表单对象从 angular js 返回到 node 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)
          }
    });
}

【问题讨论】:

  • 你能添加更多的代码吗?
  • 能否添加您正在使用的对象或示例对象?
  • 你确定在第二种情况下它实际上是一个数组。使用 Array.isArray() 方法查看developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
  • npmjs.com/package/qs#readme 在解析数组时可以看到,如果您在客户端使用 .append("imageData[]", ....) ,则 req.files.imageData 应该是一个数组。
  • @B3rn475,非常感谢,它解决了我的问题,请写在答案中,接受并对其他人有用:)

标签: arrays angularjs node.js


【解决方案1】:

如果在正文中有多个同名参数,bodyParser 将生成一个数组。您的问题是,当您只有一个参数时,情况并非如此。

为了强制这样做,您可以在扩展版本中使用 bodyParser。

app.use(bodyParser.urlencoded({ extended: true }));

并用方括号 imageData[] 调用参数

fd.append("imageData[]",... 

您可以在文档中找到 http://npmjs.com/package/qs#readme

这将触发扩展解析器始终返回一个数组。

【讨论】:

    猜你喜欢
    • 2015-09-15
    • 2015-07-05
    • 1970-01-01
    • 2010-10-12
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 2014-07-27
    • 1970-01-01
    相关资源
    最近更新 更多