我的MEAN堆栈应用程序遇到了麻烦,我不知道为什么在完成帖子后(使用了工厂).then()代码没有被执行。这是控制器:
angular.module('AcontecimientoCtrl', ['AcontecimientoService'])
.controller('AcontecimientoController', function($scope, Acontecimiento) {
var pls = this;
$scope.agregarAcontecimiento = function() {
pls.errorMsg = false;
Acontecimiento
.create($scope.acontecimiento)
.then(function(data) {
$scope.acontecimiento = {};
console.log(data.data.success);
console.log(data.data.message);
if (data.data.success) {
pls.successMsg = data.data.message;
} else {
pls.errorMsg = data.data.message;
}
})
};
});
这是服务:
angular.module('AcontecimientoService', [])
.factory('Acontecimiento', function($http) {
return {
get : function() {
return $http.get('/api/acontecimiento');
},
create : function(acontecimiento) {
return $http.post('/api/acontecimiento', acontecimiento);
},
delete : function(id) {
return $http.delete('/api/acontecimiento/' + id);
}
}
});
这里是post方法:
app.post('/api/acontecimiento', function(req, res) {
// create a todo, information comes from AJAX request from Angular
if (req.body.campo == '' || req.body.titular == '' || req.body.fecha == '' || req.body.tipo == '') {
res.json({success: false, message: 'Campo, titular, fecha y tipo de operacion deben especificarse'});
} else {
Acontecimiento.create({
campo : req.body.campo,
titular : req.body.titular,
fecha : req.body.fecha,
tipo : req.body.tipo,
brucelosis : req.body.brucelosis,
vacas : req.body.vacas,
toros : req.body.toros,
novillitos : req.body.novillitos,
vaquillonas : req.body.vaquillonas,
terneras : req.body.terneras,
terneros : req.body.terneros,
}, function(err, acontecimiento) {
if (err)
res.sendfile('./public/views/index.html');
});
}
});
如果您需要,这是我的观点:
<div class="row show-hide-message" ng-show="successMsg">
<div class="alert alert-success">Nueva operacion guardada</div>
</div>
<div class="row show-hide-message" ng-show="errorMsg">
<div class="alert alert-danger">Campo, titular, fecha y tipo de operacion deben especificarse</div>
</div>
<div class="jumbotron text-center">
<form ng-submit="agregarAcontecimiento()" class="form-horizontal">
<div class="form-group">
<label class="control-label col-sm-2" for="campo">Campo</label>
<div class="col-sm-9">
<select class="form-control" id="campo" ng-model="acontecimiento.campo" required />
<option>GUARANIMINI</option>
<option>TRES MARIAS</option>
<option>ESPADAÑAL</option>
</select>
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2" for="titular">Titular</label>
<div class="col-sm-9">
<select class="form-control" id="titular" ng-model="acontecimiento.titular" required />
<option>RUBEN CARLOS P.</option>
<option>VICTOR HUGO P.</option>
</select>
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2" for="fecha">Fecha</label>
<div class="col-sm-9">
<input type="date" id="fecha" class="form-control" ng-model="acontecimiento.fecha" required />
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2" for="tipo">Tipo</label>
<div class="col-sm-9">
<select class="form-control" id="tipo" ng-model="acontecimiento.tipo" required />
<option>VACUNA</option>
<option>VENTA</option>
<option>MUERTE</option>
<option>TRANSLADO</option>
<option>CONTAR STOCK ACTUAL</option>
</select>
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2" for="brucelosis">Brucelosis</label>
<div class="col-sm-9">
<input type="number" id="brucelosis" class="form-control" ng-model="acontecimiento.brucelosis" />
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2" for="vacas">Vacas</label>
<div class="col-sm-9">
<input type="number" id="vacas" class="form-control" ng-model="acontecimiento.vacas" />
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2" for="toros">Toros</label>
<div class="col-sm-9">
<input type="number" id="toros" class="form-control" ng-model="acontecimiento.toros" />
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2" for="novillitos">Novillitos</label>
<div class="col-sm-9">
<input type="number" id="novillitos" class="form-control" ng-model="acontecimiento.novillitos" />
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2" for="vaquillonas">Vaquillonas</label>
<div class="col-sm-9">
<input type="number" id="vaquillonas" class="form-control" ng-model="acontecimiento.vaquillonas" />
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2" for="terneras">Terneras</label>
<div class="col-sm-9">
<input type="number" id="terneras" class="form-control" ng-model="acontecimiento.terneras" />
</div>
</div>
<div class="form-group">
<label class="control-label col-sm-2" for="terneros">Terneros</label>
<div class="col-sm-9">
<input type="number" id="terneros" class="form-control" ng-model="acontecimiento.terneros" />
</div>
</div>
<div class="pull-right">
<button type="submit" class="btn btn-default">Aceptar</button>
</div>
</form>
</div>
答案 0 :(得分:1)
问题在于您的节点方面,一旦您将项目添加到我只能假设的数据库并且一切都很好,您永远不会返回响应。
将nodeJS代码更改为:
<form method='post' id='prechatForm' autocomplete="on">
<div id="bankEmployeeYesNoRadioButtonDiv">
<label>{!$Label.Bank_Employee}</label><br/>
<label for="radio-1" class="radioLabel">{!$Label.Yes}</label>
<input type="radio" name="liveagent.prechat:BankEmployee" id="radio-1" class="r1" value="Yes"></input>
<label for="radio-2" class="radioLabel">{!$Label.No}</label>
<input type="radio" name="liveagent.prechat:BankEmployee" id="radio-2" class="r1" value="No"></input>
</div>
</form>
然后它应该点击app.post('/api/acontecimiento', function (req, res) {
// create a todo, information comes from AJAX request from Angular
if (req.body.campo == '' || req.body.titular == '' || req.body.fecha == '' || req.body.tipo == '') {
res.json({
success: false,
message: 'Campo, titular, fecha y tipo de operacion deben especificarse'
});
} else {
Acontecimiento.create({
campo: req.body.campo,
titular: req.body.titular,
fecha: req.body.fecha,
tipo: req.body.tipo,
brucelosis: req.body.brucelosis,
vacas: req.body.vacas,
toros: req.body.toros,
novillitos: req.body.novillitos,
vaquillonas: req.body.vaquillonas,
terneras: req.body.terneras,
terneros: req.body.terneros,
}, function (err, acontecimiento) {
if (err) {
res.sendfile('./public/views/index.html');
} else {
res.json({
success: true,
message: 'All good!'
});
}
});
}
});
答案 1 :(得分:1)
您的代码中的问题是:
在客户端,您没有处理错误和在服务器端,您没有处理成功
因此,更改角度控制器代码并添加错误回调:
$scope.agregarAcontecimiento = function() {
pls.errorMsg = false;
Acontecimiento
.create($scope.acontecimiento)
.then(function(data) {
$scope.acontecimiento = {};
console.log(data.data.success);
console.log(data.data.message);
if (data.data.success) {
pls.successMsg = data.data.message;
} else {
pls.errorMsg = data.data.message;
}
},
function(err){
console.log('eror')
})
};
在@George提到的服务器端,添加成功响应
app.post('/api/acontecimiento', function (req, res) {
// create a todo, information comes from AJAX request from Angular
if (req.body.campo == '' || req.body.titular == '' || req.body.fecha == '' || req.body.tipo == '') {
res.json({
success: false,
message: 'Campo, titular, fecha y tipo de operacion deben especificarse'
});
} else {
Acontecimiento.create({
campo: req.body.campo,
titular: req.body.titular,
fecha: req.body.fecha,
tipo: req.body.tipo,
brucelosis: req.body.brucelosis,
vacas: req.body.vacas,
toros: req.body.toros,
novillitos: req.body.novillitos,
vaquillonas: req.body.vaquillonas,
terneras: req.body.terneras,
terneros: req.body.terneros,
}, function (err, acontecimiento) {
if (err) {
res.sendfile('./public/views/index.html');
} else {
res.json({
success: true,
message: 'Success'
});
}
});
}
});