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