An error in inserting methods


I do not understand why this error exist

HI @jawher94, could you paste the code of your requestInsert Method and code where you call the method?, Of course the cuase if you have a undefined or invalid value on “profile” property… but need to see

Meteor.methods({
	requestInsert : function (doc, user) {
		if (user.profile.nbRequest > 0) {
			/* Before */
			var i, j, skills, gestionnaires;
			var compteur = 0;
			var requiredSkillsExtended = doc.requiredSkills;
			var listeDroitPublic = ["Droit des Libertés Fondamentales", "Droit Administratif", "Droit Administratif des Biens", "Droit de l'Union Européenne", "Droit Européen", "Droit Public", "Droit Public des Affaires"];
			var listeDroitCivil = ["Droit Civil", "Droit de la Famille", "Droit Immobilier", "Droit Médical", "Droit Patrimonial"];
			var listeDroitAffaires = ["Droit des Affaires", "Droit Bancaire", "Droit de la Concurrence", "Droit de la Propriété Intellectuelle", "Droit de l'Internet", "Droit des Assurances", "Droit des Procédures Collectives", "Droit des Sociétés", "Droit du Sport", "Droit International des Affaires"];
			var listeDroitPenal = ["Droit du Code de la Route", "Droit Pénal", "Droit Pénal International"];

			doc.statut = "pending";
			doc.membreChoisi = "none";


			switch (doc.requestType) {
				case "Apporteur d'affaires":
					break;
				case "Sous-traitance partielle à Nemo Jus Conseil":
					// checkpoint:NJC
					break;
				case "Sous-traitance intégrale d’une partie d’un dossier à un membre":
					doc = determineRequiredSkills(doc);
					countMemberFound(doc);
					break;
				case "Simple consultation avec un membre":
					doc = determineRequiredSkills(doc);
					countMemberFound(doc);
					break;
				case "Parrainage":
					countMemberFoundParrainage(doc);
					break;
					
					break;
				default:
					doc = determineRequiredSkills(doc);
					countMemberFound(doc);

					if (doc.requestType == "Requête client à membre") {
						var organisation = Meteor.users.findOne({_id: doc.enquirerId}).profile.organisation;
						var organisation2 = organisation;
						if (organisation == "Entreprise")
							organisation2 = "représentant d'une Entreprise,";
						var prenomClient = ContactForm.findOne({_id: Meteor.users.findOne({_id: doc.enquirerId}).profile.contactFormId}).Prénom
						var typeDemande = displayDemandes2(doc);
						var dateDemande = displayDate2(doc);
						var departement = doc.departement;
						var deplacement = (doc.deplacement == "Je me déplace." ? "Le client se déplace auprès du professionnel." : "Le client souhaite que le professionnel se déplace.");
						var precisions = doc.precisions;
						var ville = (doc.ville ? ", à " + doc.ville + "." : ".");
						var elargissement_recherche = (doc.elargissement_recherche == "Oui." ? "Le client a souhaité étendre sa recherche aux départements limitrophes (i.e. région)" + "<br/>" : "");
						var message = (doc.precisions ? "<b><u> Message du client</u></b> <br />" + doc.precisions + "<br /> <br />" : "");
						var date = moment(doc.createdAt).format('LLL');

						if (doc.membersFound[0] != "nothing") {
							for (var k = 0; k < doc.membersFound.length; k++) {
								switch (doc.memberType) {
									case "Avocat":
									case "Fiscaliste":
										if (Meteor.users.find({_id: Avocat.findOne({_id: doc.membersFound[k]}).userId}).count() == 0) {
											var memberType = "Notaire";
											var mail = Meteor.users.findOne({_id: Notaire.findOne({_id: doc.membersFound[k]}).userId}).emails[0].address;
											var prenom = ContactForm.findOne({_id: Meteor.users.findOne({_id: Notaire.findOne({_id: doc.membersFound[k]}).userId}).profile.contactFormId}).Prénom;
											var specialisation = displayNotaire2(doc);
										}else {
											var memberType = "Avocat";
											var mail = Meteor.users.findOne({_id: Avocat.findOne({_id: doc.membersFound[k]}).userId}).emails[0].address;
											var prenom = ContactForm.findOne({_id: Meteor.users.findOne({_id: Avocat.findOne({_id: doc.membersFound[k]}).userId}).profile.contactFormId}).Prénom;
											var specialisation = doc.typeAvocat + "<br />";

											for (var p = 0; p < doc.typePrestations.length; p++)
												specialisation += displayPrestations2(doc.prestations, doc.typePrestations, p);
										}
										break;
									case "Notaire":
										var memberType = "Notaire";
										var mail = Meteor.users.findOne({_id: Notaire.findOne({_id: doc.membersFound[k]}).userId}).emails[0].address;
										var prenom = ContactForm.findOne({_id: Meteor.users.findOne({_id: Notaire.findOne({_id: doc.membersFound[k]}).userId}).profile.contactFormId}).Prénom;
										var specialisation = displayNotaire2(doc);
										break;
									case "Expert-comptable":
										var memberType = "Expert-Comptable";
										var mail = Meteor.users.findOne({_id: Expert.findOne({_id: doc.membersFound[k]}).userId}).emails[0].address;
										var prenom = ContactForm.findOne({_id: Meteor.users.findOne({_id: Expert.findOne({_id: doc.membersFound[k]}).userId}).profile.contactFormId}).Prénom;
										var specialisation = displayExpert2(doc);
										break;
									case "Gestionnaire de patrimoine":
										var memberType = "Gestionnaire de patrimoine";
										var mail = Meteor.users.findOne({_id: FinancialAdvisor.findOne({_id: doc.membersFound[k]}).userId}).emails[0].address;
										var prenom = ContactForm.findOne({_id: Meteor.users.findOne({_id: FinancialAdvisor.findOne({_id: doc.membersFound[k]}).userId}).profile.contactFormId}).Prénom;
										var specialisation = displayGestionnaire2(doc);
										break;
									case "Professionnel de l'immobilier":
										var memberType = "Professionnel de l'immobilier";
										var mail = Meteor.users.findOne({_id: RealEstate.findOne({_id: doc.membersFound[k]}).userId}).emails[0].address;
										var prenom = ContactForm.findOne({_id: Meteor.users.findOne({_id: RealEstate.findOne({_id: doc.membersFound[k]}).userId}).profile.contactFormId}).Prénom;
										var specialisation = displayImmobilier2(doc);
										break;
								}
								//Mail to member who indicated that a client searches its type profile. WORKS
								//doc.lastUrlPath(url) = Request.findOne({_id: lastUrlPath(url)})._id;
							}
						}

						for (i = 0; i < doc.membersFound.length; i++)
							mail = Meteor.users.findOne({_id: doc.enquirerId}).profile.mail;

						var memberType = doc.memberType;

						switch (memberType) {
							case "Avocat":
								var specialisation = doc.typeAvocat + "<br />";
								for (i = 0; i < doc.typePrestations.length; i++)
									specialisation += displayPrestations2(doc.prestations, doc.typePrestations, i);
								break;
							case "Fiscaliste":
								var specialisation = doc.typeAvocat + "<br />";
								for (i = 0; i < doc.typePrestations.length; i++)
									specialisation += displayPrestations2(doc.prestations, doc.typePrestations, i);
								break;

							case "Notaire":
								var specialisation = displayNotaire2(doc);
								break;
							case "Expert-comptable":
								var specialisation = displayExpert2(doc);
								break;
							case "Gestionnaire de patrimoine":
								var specialisation = displayGestionnaire2(doc);
								break;
							case "Professionnel de l'immobilier":
								var specialisation = displayImmobilier2(doc);
								break;
						}
						// //Mail to client that confirms that their request has been validated. WORKS
						// Meteor.call('A2emailConfirmationPriseEnCompteRequeteClient', user, doc);
						//Check if there are fewer than 5 members matching the query WORKS
						var nbMembres = (doc.membersFound[0] == "nothing") ? 0 : doc.membersFound.length;

						if (doc.membersFound.length <= 5) {
							var contactform = ContactForm.findOne({_id: user.profile.contactFormId});
							Meteor.call('A4rechercheFailClient', memberType, prenomClient, mail, specialisation, typeDemande, departement, ville, elargissement_recherche, deplacement, message, date, nbMembres, dateDemande, contactform);
						}else if (5 < doc.membersFound.length <= 15) {
							var contactform = ContactForm.findOne({_id: user.profile.contactFormId});
							Meteor.call('A4_1rechercheFailClient', memberType, prenomClient, mail, specialisation, typeDemande, departement, ville, elargissement_recherche, deplacement, message, date, nbMembres, dateDemande, contactform);
						}
					}else {
						var organisation = Meteor.users.findOne({_id: doc.enquirerId}).profile.organisation;
						var organisation2 = organisation;
						if (organisation == "Entreprise")
							organisation2 = "représentant d'une Entreprise,";
						else {
							organisation2 = "indépendant";
							organisation = "indépendant";
						}

						if (doc.membersFound[0] != "nothing") {
							for (i = 0; i < doc.membersFound.length; i++) {
								switch (doc.memberType) {
									case "Avocat":
									case "Fiscaliste":
										if (Meteor.users.find({_id: Avocat.findOne({_id: doc.membersFound[i]}).userId}).count() == 0) {
											var mail = Meteor.users.findOne({_id: Notaire.findOne({_id: doc.membersFound[i]}).userId}).profile.mail;
											var specialisation = displayNotaire2(doc);
										}else {
											var mail = Meteor.users.findOne({_id: Avocat.findOne({_id: doc.membersFound[i]}).userId}).profile.mail;
											var specialisation = doc.typeAvocat + "<br />";

											for (i = 0; i < doc.typePrestations.length; i++)
												specialisation += displayPrestations2(doc.prestations, doc.typePrestations, i);
										}
										break;
									case "Notaire":
										var mail = Meteor.users.findOne({_id: Notaire.findOne({_id: doc.membersFound[i]}).userId}).profile.mail;
										var specialisation = displayNotaire2(doc);
										break;
									case "Expert-comptable":
										var memberType = "Expert-Comptable";
										var mail = Meteor.users.findOne({_id: Expert.findOne({_id: doc.membersFound[i]}).userId}).profile.mail;
										var prenom = ContactForm.findOne({_id: Meteor.users.findOne({_id: Expert.findOne({_id: doc.membersFound[i]}).userId}).profile.contactFormId}).Prénom;
										var specialisation = displayExpert2(doc);
										break;
									case "Gestionnaire de patrimoine":
										var mail = Meteor.users.findOne({_id: FinancialAdvisor.findOne({_id: doc.membersFound[i]}).userId}).profile.mail;
										var specialisation = displayGestionnaire2(doc);
										break;
									case "Professionnel de l'immobilier":
										var mail = Meteor.users.findOne({_id: RealEstate.findOne({_id: doc.membersFound[i]}).userId}).profile.mail;
										var specialisation = displayImmobilier2(doc);
										break;
								}

								if (doc.requestType != "Sous-traitance partielle à Nemo Jus Conseil") {
									var contactform = ContactForm.findOne({_id: user.profile.contactFormId});
									console.warn(contactform);
									Meteor.call('sousTraitanceNemoJusConseil', this.doc, contactform);
								}

								else {
									var contactform = ContactForm.findOne({_id: user.profile.contactFormId});
									Meteor.call('njcNemoJus', this.doc, contactform);
								}
							}
						}

						mail = Meteor.users.findOne({_id: doc.enquirerId}).profile.mail;

						var memberType = doc.memberType;

						switch (memberType) {
							case "Avocat":
							case "Fiscaliste":
								var specialisation = doc.typeAvocat + "<br />";
								for (i = 0; i < doc.typePrestations.length; i++)
									specialisation += displayPrestations2(doc.prestations, doc.typePrestations, i);
								break;
							case "Notaire":
								var specialisation = displayNotaire2(doc);
								break;
							case "Expert-comptable":
								var specialisation = displayExpert2(doc);
								break;
							case "Gestionnaire de patrimoine":
								var specialisation = displayGestionnaire2(doc);
								break;
							case "Professionnel de l'immobilier":
								var specialisation = displayImmobilier2(doc);
								break;
						}
						service = doc.requestType;
						//Mail to member that confirms that their request has been validated. WORKS
						// if (service == "Sous-traitance intégrale d’une partie d’un dossier à un membre") {
								// 	Meteor.call('A2emailConfirmationPriseEnCompteRequeteMembreDemandeur', user, doc);
						// }
						// var contactform = ContactForm.findOne({_id: user.contactFormId});
						// Meteor.call('confirmationPriseEnCharge', this.doc, contactform);
						//Check if there are fewer than 5 members matching the query WORKS
						var nbMembres = (doc.membersFound[0] == "nothing") ? 0 : doc.membersFound.length;

						if (doc.membersFound.length <= 5) {
							var contactform = ContactForm.findOne({_id: user.profile.contactFormId});
							Meteor.call('searchMailMemberToMember', this.doc, contactform);
						}
					}
					break;
			}

			var result = Request.insert(doc);

			/* After */
			doc._id = result;
			var contactform = ContactForm.findOne({_id: user.profile.contactFormId});
			var client = Meteor.users.findOne({_id : doc.enquirerId});

			switch (doc.requestType) {
				case "Apporteur d'affaires":
					break;
				case "Sous-traitance partielle à Nemo Jus Conseil":
					// send NJC emails x2
					Meteor.call('NJCUserRecapMail', doc, client);
					Meteor.call('NJCAdminRecapMail', doc, client, contactform)
					break;
				case "Sous-traitance intégrale d’une partie d’un dossier à un membre":
					Meteor.call('A2emailConfirmationPriseEnCompteRequeteMembreDemandeur', user, doc);
					break;
				case "Simple consultation avec un membre":
					Meteor.call('A2ConfirmationPriseEnCompteRequete', user, doc);
					break;
				case "Parrainage":
					Meteor.call('A2ParrainageConfirmationPriseEnCompteRequeteFF', user, doc );
					break;
					
				default:
					//Mail to client that confirms that their request has been validated. WORKS
					Meteor.call('A2emailConfirmationPriseEnCompteRequeteClient', user, doc);
					break;
				}

			for (var i = 0; i < doc.membersFound.length; i++) {
				var member = Meteor.users.findOne({"profile.professionalFormId" : doc.membersFound[i]});

				if(client && member)
					switch (doc.requestType) {
						case "Apporteur d'affaires":
							break;
						case "Sous-traitance partielle à Nemo Jus Conseil":
							// checkpoint:NJC
							break;
						case "Sous-traitance intégrale d’une partie d’un dossier à un membre":
							Meteor.call('A3emailRequeteMDChercheMSA', client, member, doc);
							break;
						case "Simple consultation avec un membre":
							Meteor.call('A3EmailAlerteRequeteMembreChercheMaccepteur', client, member, doc);
							break;
						case "Parrainage":
							Meteor.call('A3ParrainageRequeteFuturFilleulChercheMembreSouhaitantEtreParrain', member, client, doc);
							break;
						
						case "Requête client à membre":
							Meteor.call('A3emailRequeteClientChercheMembre', member, client, doc, contactform, member.emails[0].address, member.profile.firstName, doc.membersFound[i], result);
							break;
						default:
							break;
						}
				}

			/* On Success*/
			var req = Request.findOne({_id : result});

			if(req){
				var nbRequest = user.profile.nbRequest - 1;
	            Meteor.call('updateCollection', "Users", user._id, {"profile.nbRequest": nbRequest});

				switch (doc.requestType) {
					case "Apporteur d'affaires":
						var spe = "";
						switch (doc.memberType) {
							case "Avocat":
							case "Fiscaliste":
								spe = doc.typeAvocat + "<br />";
								break;
							case "Notaire":
								spe = displayNotaire2(doc);
								break;
							case "Expert-comptable":
								spe = displayExpert2(doc);
								break;
							case "Gestionnaire de patrimoine":
								spe = displayGestionnaire2(doc);
								break;
							case "Professionnel de l'immobilier":
								spe = displayImmobilier2(doc);
								break;
						}
						Meteor.call('A1_1emailCopieRequeteApporteClient', Meteor.users.findOne({_id : user._id}), doc, spe);
						Meteor.call('A3_1emailCreationCompteApporte', Meteor.users.findOne({_id : user._id}), doc, result, spe);
						break;
					default:
						break;
				}

				return req;
			}
		}
		return null;
	},

and this is the call method

   //create a request
    requestInsert: {
        before: {
            insert: function (doc) {
				var validate = AutoForm.validateField("requestInsert");
                Request.simpleSchema().clean(doc)
				if(validate){
					Meteor.call('requestInsert', doc, Meteor.user(), function (err, res) {
						if(!err){
				            Router.go('/dashboard');
							if(res){
								swal('Succès', 'Votre requête a bien été traitée. Les professionnels ayant les compétences requises ont été informés.', 'success');
							}else{
								swal("Erreur", "Vous ne pouvez plus envoyer de requête aujourd'hui.", 'error');
							}
						}else{
							console.error(err);
						}
					});
				}
				return validate;
				// new code in methods_hooks.js
            }
        },
        after: {
			insert: function() {
				// new code in methods_hooks.js
			}
        },
        onSuccess: function (operation, result, template) {
            // new code in methods_hooks.js
        }

    },

You are passing Meteor.user() as user parameter to the method,

are you sure the property nbRequest you are checkin in if (user.profile.nbRequest > 0) { is present in the user doc?

thank you he work i forgot the _id