如果帖子中的数组中只有一个对象,则Foreach错误

时间:2015-01-03 21:48:55

标签: javascript json node.js mongodb express

我在nodejs中有一个服务器,在json中有这个模式:

    var UserSchema = new Schema({

        nick: String,
        deviceId: String,
        visivel: Boolean,
        checks: [{date: {type:String},log: {type:Number},lng: {type:Number}}]
});

在Post代码中我有一些东西,比如:

.post(function(req, res){

            var user = new User();
            user.deviceId = req.body.deviceId;
            console.log("ID: " + req.body.deviceId);

            User.findOne({'deviceId': user.deviceId},'deviceId nick visivel checks',function(err, useritem){

                user.nick = req.body.nick;
                user.visivel = req.body.visivel;

                if(req.body.checks != undefined){
                    req.body.checks.forEach(function(items){
                    console.log(items);
                        user.checks.push(items);
                    });
                }
                user.save(function(err){
                    if (err)
                        res.send(err);

                    res.json({ message: 'user save!' });
                    console.log('user save 1!');

                })
            }
    }

当我在 check 数组中只有一个对象的帖子时,服务器有一个例外:

  

对象#没有方法' forEach'       在Promise。 (/RalyAPP/server.js:268:22)       在Promise。 (/ RalyAPP / node_modules /猫鼬/ node_modules / mpromise
  /lib/promise.js:162:8)       在Promise.emit(events.js:95:17)       在Promise.emit(/ RalyAPP / node_modules / mongoose / node_modules / mpromise / lib / pr
  omise.js:79:38)       在Promise.fulfill(/ RalyAPP / node_modules / mongoose / node_modules / mpromise / lib
  /promise.js:92:20)       at /RalyAPP/node_modules/mongoose/lib/query.js:1833:13       在model.Document.init(/RalyAPP/node_modules/mongoose/lib/document.js:251:1
  1)       at completeOne(/RalyAPP/node_modules/mongoose/lib/query.js:1831:10)       at /RalyAPP/node_modules/mongoose/lib/query.js:1799:11       at /RalyAPP/node_modules/mongoose/lib/utils.js:414:16

但是,如果我发布一个更多的帖子,运行良好,没有例外。

可以帮助解决这个问题吗?

最好成绩。

2 个答案:

答案 0 :(得分:0)

或许这样的事情?

if (req.body.checks !== undefined) {
    if (Array.isArray(req.body.checks)) {
        req.body.checks.forEach(function(items) {
            console.log(items);
            user.checks.push(items);
        });
    } else {
        console.log(req.body.checks);
        user.checks.push(req.body.checks);
    }
}

答案 1 :(得分:0)

来到您的请求包含字符串(或)json格式的正文。您需要反序列化它并将其转换为数组对象。 (或)你可以简单地使用 快递#bodyParser。 如果要发送类型为application / json的数据,请在server.js中添加

var bodyParser = require('body-parser');
app.use( bodyParser.json() );