'req.body can't be read as an array
I'm using node.js to receive a post request, the request body has this content after printing it using console.log():
{
'object 1':
{
deviceType: 'iPad Retina',
guid: 'DF1121F9-FE66-4772-BE74-42936F1357FF',
is_deleted: '0',
last_modified: '1970-12-19T06:01:17.171',
name: 'test1',
projectDescription: '',
sync_status: '1',
userName: 'testUser'
},
'object 0':
{
deviceType: 'iPad Retina',
guid: '18460A72-2190-4375-9F4F-5324B2FCCE0F',
is_deleted: '0',
last_modified: '1970-12-19T06:01:17.171',
name: 'test2',
projectDescription: '',
sync_status: '1',
userName: 'testUser'
}
}
I'm getting the request using the below node.js code:
var restify = require('restify'),
mongoose = require('mongoose');
var connect = require('connect');
var bodyParser = require('body-parser');
/*server declaration
...
...
*/
server.use(bodyParser.json());
server.use(bodyParser.urlencoded({ extended: true }));
server.post('/project', function (req, res, next) {
console.log(req.body);//the output is shown above
console.log(req.body.length);// --> output is undefined
//2
body.req.forEach(function (item) {//got an exception
console.log(item);
});
});
The second part of the code which has forEach function gives this exception "[TypeError: Object #<Object> has no method 'forEach']"
Do you know what am I missing?
Solution 1:[1]
forEach is defined only for Arrays.
You need to use for...in loop instead:
for (var key in req.body) {
if (req.body.hasOwnProperty(key)) {
item = req.body[key];
console.log(item);
}
}
Solution 2:[2]
I use JS object, it works fast and for sure. Also I re-use Object.keys for email/DB row/column names. This is working website (professorMiriam.com/donate) code:
app.post('/donate', (req, res) => {
let nm1=req.body.name1,nm2=req.body.name2;
let frm={
'Name':nm1 +' '+ nm2,
'Email':req.body.email,
'Date':req.body.dt,
'Endorse':req.body.rcmmnd,
'Note':req.body.note,
'ip':req.body.ip,
'Amount':req.body.mnt,
'Often':req.body.often};
for(const key of Object.keys(frm)) {if(frm[key].length<1){frm[key]='N/A';}}
//simplicity to add email just in 2!! lines:
let strng=JSON.stringify(frm); strng=strng.replace(/","/g,'<br>').replace(/":"/g,': ').replace('{"','').replace('"}','<br>END');
var mail={from:'[email protected]',to:[USR,USRF],subject:usd,html:strng};
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | zoma.saf |
| Solution 2 |
