繁体   English   中英

Express js数组表单字段转换为String字段名称

[英]Express js array form field converting into String field name

在express js中,我想发布数组表单字段,但将其转换为字符串。

示例:HTML表单

<form>
  <input name="mobile" value="99999999999" />
  <input name="name[]" value="apple" />
  <input name="name[]" value="mango" />
</form>

服务器端

我有

{
     mobile: "99999999999",
    'name[0]': "apple",
    'name[1]': "mango"
}

我想要没有单引号的键名。 仅在数组字段中发生这种情况

{
    mobile: "99999999999",
    name[0]: "apple",
    name[1]: "mango"
}

任何人都可以指导我如何解决它。 我做了很多尝试,但没有成功。

对于bodyParser.urlencoded,如果将扩展选项设置为true,bodyParser中间件会将格式属性[nestedProperty]的属性名称解释为:

{ property: nestedPropert: $value }

只要确保像这样初始化中间件即可:

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

通过上述更改,您应该能够在表单提交中获得对象

根据评论,这是一种实现所需结果的解决方法:

我们将从对象中获取键,并检查哪个键是数组键之一。

这不是推荐的方法,而是一种解决方法。 这可能不可读,您可能不想在生产中使用它。

 var obj = { mobile: "1234", "name[0]": "one", "name[1]": "two", "name[2]": "three", "teezNameArr[0]": "xx0", "teezNameArr[1]": "xx1", "par[0]": "par-one", "par[1]": "par-something" }; var arrayFields = ["name", "teezNameArr", "par"]; var regexString = `^(${arrayFields.join("|")})\\\\[\\\\d+\\\\]`; var regex = new RegExp(regexString); var newObj = Object.keys(obj) .filter(aKey => regex.test(aKey)) .reduce((combinedObj, aKey) => { var keyName = aKey.match(regex)[1]; if (!combinedObj[keyName]) { combinedObj[keyName] = []; } combinedObj[keyName].push(obj[aKey]); return combinedObj; }, {}); newObj.mobile = obj.mobile; console.log(newObj); 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM