Node.js Mongoose在2/3更新后崩溃

Node.js Mongoose在2/3更新后崩溃,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,据我所知,为了获得正确的RESTfull API,您应该为要更新的每个文档发送单独的请求 在本例中,我正在处理一个用户导入函数。它正确解析前两个用户,但在第三个用户上失败 这些请求是使用Restangular发送的,使用forEach对应该导入的用户数组进行迭代 功能: /** ----------------------------------- * * importUser * @param req * @param res * -------

据我所知,为了获得正确的RESTfull API,您应该为要更新的每个文档发送单独的请求

在本例中,我正在处理一个用户导入函数。它正确解析前两个用户,但在第三个用户上失败

这些请求是使用Restangular发送的,使用forEach对应该导入的用户数组进行迭代

功能:

    /** ----------------------------------- *
     * importUser
     * @param req
     * @param res
     * ------------------------------------ */
    function importUser(req, res) {

        var data = req.body,
            User = new models.User({}),
            user = {},
            ObjectId = require('mongoose').Types.ObjectId;
        var usrId = new ObjectId( (typeof data.id !== 'undefined' && data.id.length < 12) ? "123456789012" : data.id );

        user.firstname = data.firstname;
        user.lastname = data.lastname;
        user.email = data.email.toLowerCase();

        var pass = new models.Passport({});
        pass.provider = "local";
        pass.token = "";
        pass.makeSalt();
        pass.hashedPassword = pass.encryptPassword(data.password);

        user.passports = pass;

        User.update( { 'email':user.email}, user,{ upsert : true }, function(err,docs){
                if(err) {
                    res.status(400).send(new UserError('INVALID_USER_DATA'));
                }else {
                    res.send(docs);
                }
            }
        );
    }
请求正文:

{ firstname: 'Mikael',lastname: 'Hedin', password: 'mikael', email: 'smiley86@gmail.com', organization: 'Runic Design', token: '<JSON JWT token for authentication>' }
在模型中检索到UserSchema。用户{}:

UserSchema.add({
    firstname: {
        type: String,
        required: true
    },
    lastname: {
        type: String,
        required: true
    },
    email: {
        index: {unique: true},
        type: String,
        required: true,
        validate: [validateEmail, 'INVALID_USER_EMAIL']
    },
    telephone:[TelephoneSchema],
    organization: {
        type: String
    },
    status: {
        type: Number,
        min: 0,
        max: 3,
        default: 2
        /*
         * 0 - removed
         * 1 - deactivated
         * 2 - draft/uncomfirmed
         * 3 - activated
         */
    },
    passports: [PassportSchema],
    expDate:{
        type: Date
    },
    loginAt:{
        type: Date
    }
});

我一辈子都搞不明白为什么它在最后一个请求中抛出这个错误。。。它们完全相同

如果您使用mongoose,您应该定义您的dicument或Object,因为使用mongoose的目的是将对象数据模型正确地传递到数据库

我有类似于您的代码,但结构不同:

My User.js对象数据模型

var mongoose = require('mongoose');
var Schema = mongoose.Schema;
// set up a mongoose model
module.exports = mongoose.model('User', new Schema({
    _id : {type : String, unique : true},
    username: String,
    email : String,
    password: String,
    gcmID :String,
    gender : String
}));
以下是调用用户对象模型时的代码:

var User  = require('../model_data/User');

var register = {

    registergcmSecond : function (req,res){
        //get id req.body to a variable and check it one by one
        var gcmID  = req.body.gcmID || '';
        var uidUser = req.body.uidUser || '';
        //check your your variable to make sure is not null
        if(gcmID &&uidUser){
            User.update({ _id : uidUser },{gcmID : gcmID}, function (err, user){
                if(err){
                    res.json({
                        status : "not_ok",
                        result : "Failed query",
                        resultType : serverConst.ErrorQuery
                    });
                }else{
                    res.json({
                        status : "ok",
                        result : "Document Updated",
                        resultType : serverConst.RegisterGcm
                    });
                }

            });
        }
    }
}

如果您被卡住了,不知道结构是什么样子,您可以访问此网站:

文档/模型在单独的文件中定义,您可以看到我使用“User”变量调用它。User=new models.User{},你能给我你请求更新的所有输入数据吗。用req.body更新,以及models.User{}返回的内容。
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
// set up a mongoose model
module.exports = mongoose.model('User', new Schema({
    _id : {type : String, unique : true},
    username: String,
    email : String,
    password: String,
    gcmID :String,
    gender : String
}));
var User  = require('../model_data/User');

var register = {

    registergcmSecond : function (req,res){
        //get id req.body to a variable and check it one by one
        var gcmID  = req.body.gcmID || '';
        var uidUser = req.body.uidUser || '';
        //check your your variable to make sure is not null
        if(gcmID &&uidUser){
            User.update({ _id : uidUser },{gcmID : gcmID}, function (err, user){
                if(err){
                    res.json({
                        status : "not_ok",
                        result : "Failed query",
                        resultType : serverConst.ErrorQuery
                    });
                }else{
                    res.json({
                        status : "ok",
                        result : "Document Updated",
                        resultType : serverConst.RegisterGcm
                    });
                }

            });
        }
    }
}