我有点问题要理解这里要做什么。我正在学习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”,转换为数字失败
我很抱歉意大利语字段,但它是我在电脑上的旧数据库,我只用它来学习
答案 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
})
由于teamsSchema
将GolSubitiCasa
定义为数字而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的快速文档。