Javascript 如何反序列化发布到我的NodeJS/Express web app的数组/对象?
我正在用NodeJS/ExpressJS编写一个应用程序 我有一张这样的表格:Javascript 如何反序列化发布到我的NodeJS/Express web app的数组/对象?,javascript,node.js,express,query-string,Javascript,Node.js,Express,Query String,我正在用NodeJS/ExpressJS编写一个应用程序 我有一张这样的表格: <form method="post" action="/sendinfo"> <label>Name</label> <input type="text" name="name" /> <label>Address</label> <input type="text" name="address[numb
<form method="post" action="/sendinfo">
<label>Name</label>
<input type="text" name="name" />
<label>Address</label>
<input type="text" name="address[number]" />
<input type="text" name="address[street]" />
<input type="text" name="address[suburb]" />
<input type="text" name="address[postcode]" />
<label>Phones</label>
<input type="text" name="phones[0]" />
<input type="text" name="phones[1]" />
</form>
{
"name": "Jonathan",
"address[number]": "1",
"address[street]": "Test St",
"address[suburb]": "TestSuburb",
"address[postcode]": "1234",
"phones[0]": "12345678",
"phones[1]": "87654321"
}
app.post('/sendinfo', function (req, res) {
var qs = require('qs');
var deserializedBody = qs.parse(qs.stringify(req.body));
// ...code to save the contents of deserializedBody to the database...
res.render('done');
});
提交表单时,我的req.body
如下所示:
<form method="post" action="/sendinfo">
<label>Name</label>
<input type="text" name="name" />
<label>Address</label>
<input type="text" name="address[number]" />
<input type="text" name="address[street]" />
<input type="text" name="address[suburb]" />
<input type="text" name="address[postcode]" />
<label>Phones</label>
<input type="text" name="phones[0]" />
<input type="text" name="phones[1]" />
</form>
{
"name": "Jonathan",
"address[number]": "1",
"address[street]": "Test St",
"address[suburb]": "TestSuburb",
"address[postcode]": "1234",
"phones[0]": "12345678",
"phones[1]": "87654321"
}
app.post('/sendinfo', function (req, res) {
var qs = require('qs');
var deserializedBody = qs.parse(qs.stringify(req.body));
// ...code to save the contents of deserializedBody to the database...
res.render('done');
});
但我希望它看起来像这样,在属性或数组中嵌套值:
{
"name": "Jonathan",
"address": {
"number": "1",
"street": "Test St",
"suburb": "TestSuburb",
"postcode": "1234",
},
"phones": [
"12345678",
"87654321"
]
}
我怎样才能做到这一点?找到了方法
只需安装querystring包:
`npm install qs --save`
那么就这样称呼它:
<form method="post" action="/sendinfo">
<label>Name</label>
<input type="text" name="name" />
<label>Address</label>
<input type="text" name="address[number]" />
<input type="text" name="address[street]" />
<input type="text" name="address[suburb]" />
<input type="text" name="address[postcode]" />
<label>Phones</label>
<input type="text" name="phones[0]" />
<input type="text" name="phones[1]" />
</form>
{
"name": "Jonathan",
"address[number]": "1",
"address[street]": "Test St",
"address[suburb]": "TestSuburb",
"address[postcode]": "1234",
"phones[0]": "12345678",
"phones[1]": "87654321"
}
app.post('/sendinfo', function (req, res) {
var qs = require('qs');
var deserializedBody = qs.parse(qs.stringify(req.body));
// ...code to save the contents of deserializedBody to the database...
res.render('done');
});
或者使用
urlencoded
中间件(将其放在任何路由之前):
于2017年7月16日更新
urlencoded
已从最新版本的express
节点模块中删除,因此请暂时使用此模块
const bodyParser = require("body-parser");
/** bodyParser.urlencoded(options)
* Parses the text as URL encoded data (which is how browsers tend to send form data from regular forms set to POST)
* and exposes the resulting object (containing the keys and values) on req.body
*/
app.use(bodyParser.urlencoded({
extended: true
}));
/**bodyParser.json(options)
* Parses the text as JSON and exposes the resulting object on req.body.
*/
app.use(bodyParser.json());
更好!我可以避免在每个post处理程序中进行相同的调用。