发布后没有达到.then()

时间:2017-06-05 13:36:15

标签: javascript angularjs node.js mean-stack

我的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>

2 个答案:

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