2017-10-05 6 views
0

J'ai un petit problème pour comprendre ce que je dois faire ici. J'apprends nodejs et mongodb/mongoose. Seulement pour apprendre, je construis une petite page pour mettre à jour les documents dans mon DB. Tout d'abord, je choisis deux équipes à partir d'un select, puis j'insère des données d'entrée et ensuite je veux les enregistrer dans le db. Sur le front-end, mon contrôleur est comme ceci:CastError: La conversion au numéro a échoué pour la valeur "undefined" au chemin

FootballNumbers.controller('teamController', function($scope, $route, $routeParams, $http){ 

$http.get('/api/teams').then(function(response){ 
     $scope.teams = response.data; 
     console.log(response.data); 
    }); 

$scope.aggiornaDB = function(squadra1,squadra2){ 
     console.log(squadra1); 
     console.log(squadra2); 
     for(i=0; i<$scope.teams.length; i++){ 
      for (j=0; j<$scope.teams.length;j++){ 
       if($scope.teams[i].Nome==squadra1){ 
        if($scope.teams[j].Nome==squadra2){ 
         console.log($scope.teams[i].Nome); 
         console.log($scope.teams[j].Nome); 

         var Classifica = $scope.Classifica; 
         var ClassificaCasa = $scope.ClassificaCasa; 
         var ClassificaTrasferta = $scope.ClassificaTrasferta; 

         var Classifica2 = $scope.Classifica2; 
         var ClassificaCasa2 = $scope.ClassificaCasa2; 
         var ClassificaTrasferta2 = $scope.ClassificaTrasferta2 

         var Forma = $scope.Forma; 
         var Forma2 = $scope.Forma2; 

         var PartiteGiocate = $scope.teams[i].PartiteGiocate + 1; 
         var PartiteGiocateCasa = $scope.teams[i].GiocateCasa + 1; 

         var PartiteGiocate2 = $scope.teams[j].PartiteGiocate + 1; 
         var PartiteGiocateTrasferta = $scope.teams[j].GiocateTrasferta + 1; 

         var Vinte = $scope.teams[i].Vinte; 

         var VinteCasa = $scope.teams[i].VinteCasa; 

         var Perse2 = $scope.teams[j].Perse ; 
         var PerseTrasferta= $scope.teams[j].PerseTrasferta ; 

         var Pareggiate = $scope.teams[i].Pareggiate ; 
         var PareggiateCasa = $scope.teams[i].PareggiateCasa ; 
         var Pareggiate2 = $scope.teams[j].Pareggiate ; 
         var PareggiateTrasferta = $scope.teams[j].PareggiateTrasferta ; 

         var Perse = $scope.teams[i].Perse ; 
          var PerseCasa = $scope.teams[i].PerseCasa ; 
          var Vinte2 = $scope.teams[j].Vinte ; 
          var VinteTrasferta = $scope.teams[j].VinteTrasferta ; 

         if($scope.GolCasa > $scope.GolTrasferta){ 
          Vinte = $scope.teams[i].Vinte + 1; 
          VinteCasa = $scope.teams[i].VinteCasa + 1; 
          Perse2 = $scope.teams[j].Perse + 1; 
          PerseTrasferta= $scope.teams[j].PerseTrasferta + 1; 
         } 
         else if($scope.GolCasa == $scope.GolTrasferta){ 
          Pareggiate = $scope.teams[i].Pareggiate + 1; 
          PareggiateCasa = $scope.teams[i].PareggiateCasa + 1; 
          Pareggiate2 = $scope.teams[j].Pareggiate + 1; 
          PareggiateTrasferta = $scope.teams[j].PareggiateTrasferta + 1; 
         } 
         else { 
          Perse = $scope.teams[i].Perse + 1 ; 
          PerseCasa = $scope.teams[i].PerseCasa + 1 ; 
          Vinte2 = $scope.teams[j].Vinte + 1; 
          VinteTrasferta = $scope.teams[j].VinteTrasferta + 1; 
         } 

         var SommaGol = $scope.GolCasa + $scope.GolTrasferta; 

         var MediaGol = (($scope.teams[i].MediaGol * $scope.teams[i].PartiteGiocate) + SommaGol)/ PartiteGiocate; 
         var MediaGol2 = (($scope.teams[j].MediaGol * $scope.teams[j].PartiteGiocate) + SommaGol)/ PartiteGiocate2; 

         var Over1 = $scope.teams[i].Over1 ; 
          var Over1Casa = $scope.teams[i].Over1Casa ; 
          var Over1T= $scope.teams[j].Over1 ; 
          var Over1Trasferta = $scope.teams[j].Over1Trasferta ; 

         if(SommaGol>1){ 
          Over1 = $scope.teams[i].Over1 + 1; 
          Over1Casa = $scope.teams[i].Over1Casa + 1; 
          Over1T= $scope.teams[j].Over1 + 1; 
          Over1Trasferta = $scope.teams[j].Over1Trasferta + 1; 
         } 

         var Over2 = $scope.teams[i].Over2; 
          var Over2Casa = $scope.teams[i].Over2Casa; 
          var Over2T= $scope.teams[j].Over2; 
          var Over2Trasferta = $scope.teams[j].Over2Trasferta; 

         if(SommaGol>2){ 
          Over2 = $scope.teams[i].Over2 + 1; 
          Over2Casa = $scope.teams[i].Over2Casa + 1; 
          Over2T= $scope.teams[j].Over2 + 1; 
          Over2Trasferta = $scope.teams[j].Over2Trasferta + 1; 
         } 

          var GolSegnati = $scope.teams[i].GolSegnati ; 
          var GolSegnatiCasa = $scope.teams[i].GolSegnatiCasa ; 
          var GolSubitiTrasferta = $scope.teams[j].GolSubitiTrasferta ; 
          var GolSubiti2 = $scope.teams[j].GolSubiti ; 

         if ($scope.GolCasa>0){ 
          GolSegnati = $scope.teams[i].GolSegnati + 1; 
          GolSegnatiCasa = $scope.teams[i].GolSegnatiCasa + 1; 
          GolSubitiTrasferta = $scope.teams[j].GolSubitiTrasferta + 1; 
          GolSubiti2 = $scope.teams[j].GolSubiti + 1; 
         } 

          var GolSubiti = $scope.teams[i].GolSubiti ; 
          var GolSubitiCasa = $scope.teams[i].GolSubitiCasa ; 
          var GolSegnatiTrasferta = $scope.teams[j].GolSegnatiTrasferta; 
          var GolSegnati2 = $scope.teams[j].GolSegnati ; 

         if ($scope.GolTrasferta>0){ 
          GolSubiti = $scope.teams[i].GolSubiti + 1; 
          GolSubitiCasa = $scope.teams[i].GolSubitiCasa + 1; 
          GolSegnatiTrasferta = $scope.teams[j].GolSegnatiTrasferta + 1; 
          GolSegnati2 = $scope.teams[j].GolSegnati + 1; 
         } 

        } 
       } 
$http.put('/api/teams/update/' + $scope.teams[i]._id, { 
    params: { 
     'Classifica': Classifica, 
     'ClassificaCasa': ClassificaCasa, 
     'ClassificaTrasferta': ClassificaTrasferta, 
     "Forma": Forma, 
     "PartiteGiocate": PartiteGiocate, 
     "PartiteGiocateCasa": PartiteGiocateCasa, 
     "VinteCasa": VinteCasa, 
     "Vinte": Vinte, 
     "Pareggiate": Pareggiate, 
     "PareggiateCasa": Pareggiate, 
     "Perse": Perse, 
     "PerseCasa": PerseCasa, 
     "MediaGol": MediaGol, 
     "Over1": Over1, 
     "Over1Casa": Over1Casa, 
     "Over2": Over2, 
     "Over2Casa": Over2Casa, 
     "GolSegnati": GolSegnati, 
     "GolSegnatiCasa": GolSegnatiCasa, 
     "GolSubiti": GolSubiti, 
     "GolSubitiCasa": GolSubitiCasa 
     } 
    }); 

    $http.put('/api/teams/update2/' + $scope.teams[j]._id, { 
     params: { 
      'Classifica2': Classifica2, 
      'ClassificaCasa2': ClassificaCasa2, 
      'ClassificaTrasferta2': ClassificaTrasferta2, 
      "Forma2": Forma2, 
      "PartiteGiocate2": PartiteGiocate2, 
      "PartiteGiocateTrasferta": PartiteGiocateTrasferta, 
      "VinteTrasferta": VinteTrasferta, 
      "Vinte2": Vinte2, 
      "Pareggiate2": Pareggiate2, 
      "PareggiateTrasferta": PareggiateTrasferta, 
      "Perse2": Perse2, 
      "PerseTrasferta": PerseTrasferta, 
      "MediaGol2": MediaGol2, 
      "Over1T": Over1T, 
      "Over1Trasferta": Over1Trasferta, 
      "Over2T": Over2T, 
      "Over2Trasferta": Over2Trasferta, 
      "GolSegnati2": GolSegnati2, 
      "GolSegnatiTrasferta": GolSegnatiTrasferta, 
      "GolSubiti2": GolSubiti2, 
      "GolSubitiTrasferta": GolSubitiTrasferta 
     } 
    }) 
    .then(function() { 
     alert('Teams updated') 
    }) 

      } 
     } 
     } 


     }); 

Ma collection est appelée "équipes", et voici mon back-end:

 var express = require('express'); 
    var bodyParser = require('body-parser'); 
    var app = express(); 
    var mongoose = require('mongoose'); 
     var ObjectId = mongoose.Schema.Types.ObjectId; 



    mongoose.connect('mongodb://localhost:27017/FootballNumbers', function(err){ 
    if(err) 
     console.log(err); 
    else 
     console.log("db connected") 
    }); 


    var db = mongoose.connection; 


    var teamsSchema = mongoose.Schema({ 
     "_id": {type: ObjectId}, 
     "Nome" : {type: String}, 
     "Paese" : {type: String}, 
     "Bandiera" : {type: String}, 
     "Stemma" : {type: String}, 
     "Campionato" : {type: String}, 
     "Classifica" : {type: Number}, 
     "ClassificaCasa" : {type: Number}, 
     "ClassificaTrasferta" : {type: Number}, 
     "PartiteGiocate" : {type: Number}, 
     "Vinte" : {type: Number}, 
     "Pareggiate" : {type: Number}, 
     "Perse" : {type: Number}, 
     "GiocateCasa" : {type: Number}, 
     "VinteCasa" : {type: Number}, 
     "PareggiateCasa" : {type: Number}, 
     "PerseCasa" : {type: Number}, 
     "GiocateTrasferta" : {type: Number}, 
     "VinteTrasferta" : {type: Number}, 
     "PareggiateTrasferta" : {type: Number}, 
     "PerseTrasferta" : {type: Number}, 
     "Forma" : {type: Number}, 
     "MediaGol" : {type: Number}, 
     "Over1" : {type: Number}, 
     "Over2" : {type: Number}, 
     "Over1Casa" : {type: Number}, 
     "Over2Casa" : {type: Number}, 
     "Over1Trasferta" : {type: Number}, 
     "Over2Trasferta" : {type: Number}, 
     "GolSegnati" : {type: Number}, 
     "GolSegnatiCasa" : {type: Number}, 
     "GolSegnatiTrasferta" : {type: Number}, 
     "GolSubiti" : {type: Number}, 
     "GolSubitiCasa" : {type: Number}, 
     "GolSubitiTrasferta" : {type: Number}, 
    }, 
     { collection : 'Teams' }); 


     var Team = mongoose.model('Team', teamsSchema); 


    app.use(bodyParser.urlencoded({extended: true})); 
    app.use(bodyParser.json()); 
    app.use(express.static(__dirname + '/client')); 

    app.get('/api/teams', function(req, res){ 
     Team.find(function (err, data) { 
      if (err) return console.error(err); 
      res.json(data); 
    }) 

    }); 


    /* UPDATE team*/ 
     app.put('/api/teams/update/:_id', function(req, res) { 
      Team.update({"_id": req.params._id} , { $set: { "Classifica" : req.params.Classifica, 
    "ClassificaCasa":req.params.ClassificaCasa, 
    "ClassificaTrasferta":req.params.ClassificaTrasferta, 
    "PartiteGiocate": req.params.PartiteGiocate, 
    "GiocateCasa": req.params.PartiteGiocateCasa, 
    "Vinte": req.params.Vinte, 
    "Pareggiate": req.params.Pareggiate, 
    "Perse": req.params.Perse, 
    "VinteCasa": req.params.VinteCasa, 
    "PareggiateCasa": req.params.PareggiateCasa, 
    "PerseCasa": req.params.PerseCasa, 
    "Forma": req.params.Forma, 
    "MediaGol": req.params.MediaGol, 
    "Over1": req.params.Over1, 
    "Over2": req.params.Over2, 
    "Over1Casa": req.params.Over1Casa, 
    "Over2Casa": req.params.Over2Casa, 
    "GolSegnati": req.params.GolSegnati, 
    "GolSegnatiCasa": req.params.GolSegnatiCasa, 
    "GolSubiti": req.params.GolSubiti, 
    "GolSubitiCasa": req.params.GolSubitiCasa 
    }},function(err, teams){ 
    if(err) { 
     console.log(err); 
     res.status(500).send(err); 
    } else { 
     res.status(200).send(teams); 
    } 
    }); 
    }); 




    app.put('/api/teams/update2/:_id', function(req, res) { 
     Team.update({"_id": req.params._id2 }, { $set: { "Classifica" : req.params.Classifica2, 
     "ClassificaCasa":req.params.ClassificaCasa2, 
     "ClassificaTrasferta":req.params.ClassificaTrasferta2, 
     "PartiteGiocate": req.params.PartiteGiocate2, 
     "GiocateTrasferta": req.params.PartiteGiocateTrasferta, 
     "Vinte": req.params.Vinte2, 
     "Pareggiate": req.params.Pareggiate2, 
     "Perse": req.params.Perse2, 
     "VinteTrasferta": req.params.VinteTrasferta, 
     "PareggiateTrasferta": req.params.PareggiateTrasferta, 
     "PerseTrasferta": req.params.PerseTrasferta, 
     "Forma": req.params.Forma2, 
     "MediaGol": req.params.MediaGol2, 
     "Over1": req.params.Over1T, 
     "Over2": req.params.Over2T, 
     "Over1Trasferta": req.params.Over1Trasferta, 
     "Over2Trasferta": req.params.Over2Trasferta, 
     "GolSegnati": req.params.GolSegnati2, 
     "GolSegnatiTrasferta": req.params.GolSegnatiTrasferta, 
     "GolSubiti": req.params.GolSubiti2, 
     "GolSubitiTrasferta": req.params.GolSubitiTrasferta 
     }},function(err, teams){ 
    if(err) { 
     console.log(err); 
     res.status(500).send(err); 
    } else { 
      res.status(200).send(teams); 
    } 
}); 
}); 


app.listen(3000, function(){ 
    console.log('server is running'); 
}); 

Et dans le terminal i a cette erreur: CastError : Moulage au numéro a échoué pour la valeur « non défini » au chemin « GolSubitiCasa »

CastError: Monter au numéro a échoué pour la valeur « non défini » au chemin « GolSubitiTrasferta »

Je suis désolé pour le ital champs ian mais c'est une ancienne base de données que j'avais sur mon ordinateur et je l'utilise seulement pour apprendre

+0

'req.params.GolSubitiCasa' et' req.params.GolSubitiTrasferta' sont indéfinis. Essayez de déboguer avec la console dans le contrôleur avant d'essayer d'enregistrer dans DB. – TGrif

+0

tous les req.params. arrive comme non défini au backend, mais dans le frontend le nombre est juste. – mpeg90

Répondre

0

En fait, req.params représentent les paramètres de l'itinéraire. Vous devez utiliser req.body pour obtenir les données soumises dans votre requête.

Lorsque vous effectuez un appel depuis votre frontend comme ceci:

$http.put('/api/teams/update/' + $scope.teams[i]._id, { 
    params: { 
     // ... 
     "GolSubitiCasa": GolSubitiCasa 
    } 
}); 

côté serveur vous obtiendrez:

app.put('/api/teams/update/:_id', function(req, res) { 
    console.log(req.params); // -> { _id: the value of $scope.teams[i]._id } 
    console.log(req.body); // -> { 
          //  params: { 
          //   // ... 
          //   "GolSubitiCasa": GolSubitiCasa 
          //  } 
          //  } 
    console.log(req.params.GolSubitiCasa); 
          // -> undefined 
}) 

Depuis votre teamsSchema définir GolSubitiCasa comme nombre et req.params.GolSubitiCasa est non défini, vous obtenir le CastError (undefined n'est pas un nombre).

Pour récupérer vos données, vous devez utiliser:

app.put('/api/teams/update/:_id', function(req, res) { 
    console.log(req.body.params); // -> { 
            //  // ... 
            //  "GolSubitiCasa": GolSubitiCasa 
            // } 
    console.log(req.body.params.GolSubitiCasa); 
            // -> the value of GolSubitiCasa 
}) 

Aussi, je vous suggère de changer le nom de votre objet, car params faire un peu confus.

Documentation rapide pour req.params.