2015-02-27 3 views
2

Я использую node.js получить пост запрос, тело запроса имеет это содержимое после его печати с помощью console.log():req.body не может быть прочитан как массив

{ 
    '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' 
    } 
} 

я получаю запрос, используя приведенную ниже Node.js код:

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); 
    }); 
}); 

Вторая часть кода, которая имеет функцию forEach дает это исключение «[TypeError: Object #<Object> has no method 'forEach']»

ли вы, знаете, что мне не хватает?

+1

возможный дубликат [Loop через объект JavaScript] (http://stackoverflow.com/questions/684672/loop-through-javascript-object) –

ответ

7

req.body не массив, а объект с двумя свойствами. Это видно из представленного вами вывода console.log. Поэтому он не имеет свойства length и не имеет метода forEach.

Если бы это был массив, это выглядело бы так:

[ 
    { 
    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' 
    }, 
    { 
    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' 
    } 
] 

Для перебора ключей объекта у вас есть, вы можете использовать конструкцию

for(var key in req.body) { 
    if(req.body.hasOwnProperty(key)){ 
    //do something with e.g. req.body[key] 
    } 
} 
+0

благодарственное вы за информацию. Я все еще новичок в node.js, и эта информация поможет. Ты спас мой день! –

7

forEach является определен только для массивов.

Вы должны использовать for...in цикл вместо:

for (var key in req.body) { 
    if (req.body.hasOwnProperty(key)) { 
    item = req.body[key]; 
    console.log(item); 
    } 
} 
+0

Это было быстро, вы спасли мой день. спасибо –

Смежные вопросы