使用Angular.js使用POST方法发送输入值

时间:2016-01-21 18:17:48

标签: javascript angularjs node.js post get

我尝试使用Angular.js通过POST方法发送两个输入值,但是我无法在URL上传递这些值,甚至无法在服务器端捕获它们。 有人可以帮我解决这个问题吗?

对于每个按钮,我需要传递两个值+按钮值(operacao)

表格

<form id="form" ng-controller="Controller">
  <input id="val1" name="val1" ng-model="val1" placeholder="Valor 1" type="text">
  <input id="val2" name="val2" ng-model="val2" placeholder="Valor 2" type="text">
  <input id="operacao" name="operacao" type="hidden" value="0">
  <input id="soma" type="button" value="soma" ng-click="doClick(val1, val2)">
  <input id="sub" type="button" value="sub">
  <input id="mult" type="button" value="mult">
  <input id="divs" type="button" value="divs">
  <input id="resultado" type="text">
</form>

控制器

.controller("Controller", function($scope, operacaoService) { 
  $scope.model = {};
  $scope.doClick = function(operacao) {
    $scope.model.operacao = operacao;
    operacaoService.postOperacao($scope.model)
    .success(function(data, status) {
      $scope.valores = data.result;
        console.log(data.result);
    })
    .error(function(data, status) {
      console.log("erro", status);
    });
  };
})

服务

module.factory('operacaoService', function($http) {

  var postOperacao = function(model) {
    return $http({
      url: "/operacoes",
      method: "post",
      params: model
    });
  };

  return {
    postOperacao: postOperacao
  };
});

服务器(Node.js)

app.post('/operacoes', function(req, res) {

  var valores = req.query;
  var val1 = parseInt(valores.val1);
  var val2 = parseInt(valores.val2);
  var operacao = (valores.operacao);
  var result;

  if (operacao === "soma") {
    result = val1 + val2;
    res.send({
      result: result,
      val1: val1,
      val2: val2,
      operacao: operacao
    });
  }
}

1 个答案:

答案 0 :(得分:0)

根据https://docs.angularjs.org/api/ng/service/ $ http#用法,您似乎使用配置对象的错误属性来设置数据有效负载。 params属性用于 GET 请求。

在您的服务中,尝试编辑$ http呼叫,如下所示:

module.factory('operacaoService', function($http) {

  var postOperacao = function(model) {
  return $http({
    url: "/operacoes",
    method: "post",
    data: model
    });
  };

  return {
    postOperacao: postOperacao
  };
});

此外,在您的服务器端,您似乎正在使用快递。而不是使用

var valores = req.query

将其更改为:

var valores = req.body

有关详细信息,请参阅http://expressjs.com/en/api.html#req.body