CastError:对于路径

时间:2017-10-05 08:33:22

标签: angularjs node.js mongodb mongoose

我有点问题要理解这里要做什么。我正在学习nodejs和mongodb / mongoose。只是为了学习,我正在构建一个小页面来更新我的数据库中的文档。首先,我从一个选择中选择两个团队,然后从输入中插入数据,然后我想将它们保存在数据库中。在前端,我的控制器是这样的:

 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')
    })

            }
        }
       }


       });

我的收藏名为“团队”,这是我的后端:

      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');
 });

在终端中我收到了这个错误:CastError:在路径“GolSubitiCasa”中,为了“undefined”值,转换为数字失败

CastError:在路径“GolSubitiTrasferta”中,对于值“undefined”,转换为数字失败

我很抱歉意大利语字段,但它是我在电脑上的旧数据库,我只用它来学习

1 个答案:

答案 0 :(得分:0)

实际上,req.params代表路线参数。您需要使用req.body来获取查询中提交的数据。

当您从前端拨打电话时:

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

服务器端你会得到:

 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
 })

由于teamsSchemaGolSubitiCasa定义为数字而req.params.GolSubitiCasa未定义,因此您会收到CastError(undefined不是数字)。

要获取数据,您需要使用:

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
})

此外,我建议您更改对象的名称,因为params会使其有点混乱。

req.params的快速文档。