TheMean Won
TheMean Won

Reputation: 45

Posting with Angular to Mongo

My setup is NodeJS, MongoDB, and Angular. I'm currently trying to add POSTing capability to my test code but can't quite wrap my head around it. Currently I can pull data from the DB and I threw together a quick and dirty form/factory based on a number of examples I've seen to try to get the POST function working.

The problem I'm running into is actually getting the values to be added to the DB. When I submit the form, a new ObjectID is created in the DB with a "_v" field and a value of 0. So I know the POST is at least being sent to the DB, but the values I want are not. I'm sure I'm doing something stupid and any help is greatly appreciated.

Here is my controller/factory setup: (I named the POST factory "taco" so it would stand out. Also because they're delicious.)

      angular.module('app', ['ngRoute'])
     .factory('Users', ['$http', function($http) {
        return $http.get('/users');
     }])
    .factory('taco', ['$http', function($http) {
        return $http.post('/users');
     }])
     .controller('UserController', ['$scope', 'Users', function($scope, Users) {
        Users.success(function(data) {
            $scope.users = data;
        }).error(function(data, error) {
            console.log(error);
            $scope.users = [];
        });
     }])
     .controller('ExampleController', ['$scope', 'taco', function($scope, taco) {
     $scope.submit = function() {
      if ($scope.users.name) {
      $scope.name.post(this.name);
      $scope.name = '';
    }
  };
}]);

Here is my form:

<div>
   <form ng-submit="submit()" ng-controller="ExampleController">
      Enter the things:<br/>
      <input type="text" ng-model="name" name="user.name" placeholder="name" /><br/>
      <input type="text" ng-model="emp_id" name="user.emp_id" placeholder="EID" /><br/>
      <input type="text" ng-model="loc" name="user.loc" placeholder="location" /><br/>
      <input type="submit" id="submit" value="Submit" />
   </form>
</div>

Upvotes: 0

Views: 3706

Answers (2)

Pasco
Pasco

Reputation: 1

I would define a function submit that would send the data once a user clicks on submit:

$scope.submit = function() {
  $http.post('/destination', {my: 'data'});
}

Upvotes: 0

Andreas Argelius
Andreas Argelius

Reputation: 3614

To post using the $http service you can do:

angular.module('myApp')

.controller('MyController', function($scope, $http) {
  $http.post('/destination', {my: 'data'});
});

You're not sending any data in your POST request. The taco service just executes a $http.post call and returns the promise.

Please look at the $http service documents: https://docs.angularjs.org/api/ng/service/$http

Upvotes: 1

Related Questions