在我的表单中,我可以动态添加任意数量的属性:
<form action="">
<div class="property">
<label>Name : <input type="text" name="properties[1][name]"></label>
<label>Order : <input type="text" name="properties[1][order]"></label>
<label>Label : <input type="text" name="properties[1][label]"></label>
<label>Type : <input type="text" name="properties[1][type]"></label>
<label>Description : <textarea name="properties[1][description]"></textarea></label>
</div>
<div class="property">
<label>Name : <input type="text" name="properties[2][name]"></label>
<label>Order : <input type="text" name="properties[2][order]"></label>
<label>Label : <input type="text" name="properties[2][label]"></label>
<label>Type : <input type="text" name="properties[2][type]"></label>
<label>Description : <textarea name="properties[2][description]"></textarea></label>
</div>
<div class="property">
<label>Name : <input type="text" name="properties[3][name]"></label>
<label>Order : <input type="text" name="properties[3][order]"></label>
<label>Label : <input type="text" name="properties[3][label]"></label>
<label>Type : <input type="text" name="properties[3][type]"></label>
<label>Description : <textarea name="properties[3][description]"></textarea></label>
</div>
...
</form>
在node.js中,我想在forEach
上执行req.body.properties
但是有超过20个属性,req.body.properties
以某种方式投射在Object
和forEach
中函数不再存在。
propUpdate: (req, res) => {
const post = req.body;
console.log('isArray :', Array.isArray(post.properties));
console.log('isObject :', require('lodash').isObject(post.properties));
console.log('properties :', post.properties);
...
}
以下是20个或更少属性的结果:
isArray : true
isObject : true
properties : [ { name: 'test 1',
order: '1',
label: 'label 1',
type: 'type 1' },
{ name: 'test 2',
order: '2',
label: 'label 2',
type: 'type 2' },
....
{ name: 'test 20',
order: '20',
label: 'label 20',
type: 'type 20' } ]
拥有超过20个属性:
isArray : false
isObject : true
properties : { '1' :
{ name: 'test 1',
order: '1',
label: 'label 1',
type: 'type 1' },
'2' :
{ name: 'test 2',
order: '2',
label: 'label 2',
type: 'type 2' },
....
'21' :
{ name: 'test 21',
order: '21',
label: 'label 21',
type: 'type 21' } }
我想了解为什么node.js有这种行为以及如何避免它。 有人可以帮助我吗?
PS:我不得不减少我的代码示例,因为stackoverflow不喜欢拥有比解释更多的代码。希望这仍然可以理解。
答案 0 :(得分:3)
//Compiler Directives
#include<iostream>
#include<cstdlib>
using namespace std;
//Constant Declarations
const int LOWERBOUND = 400;
const int UPPERBOUND = 2400;
//Main Body
int main(){
//Local Identifiers
int year, leapCode;
//Input Module
cout<<"Please enter a year in the range 400 to 2400\t";
cin>>year;
//Process Module
if ((year >= LOWERBOUND)&& (year <= UPPERBOUND)){
if (year%4!=0)
leapCode = 1;
else
if (year%100!=0)
leapCode = 2;
else
if (year%400!=0)
leapCode = 3;
else
leapCode = 4;
switch(leapCode){
case 1:
cout<<"The year "<<year<<" is not a leap year\n";
break;
case 2:
cout<<"The year "<<year<<" is a leap year\n";
break;
case 3:
cout<<"The year "<<year<<" is a century year but not a leap year\n";
break;
case 4:
cout<<"The year "<<year<<" is a leap century year";
break;
} //end switch
}
else
cout<<"The year is out of range\n";
system("PAUSE");
return 0;
}
(处理请求主体)使用qs
库来解析URL编码数据。
该库的documentation表示关于数组:
qs 还会将数组中的索引限制为最大索引20.任何索引大于20的数组成员都将转换为索引为键的对象< / p>
...
传递
可以覆盖此限制body-parser
选项
但是,似乎没有办法将该选项传递给arrayLimit
到qs
。但是将对象转换为数组相对容易:
body-parser