Get ng-model values on POST to Express.js endpoint

I am creating a Node.js application with AngularJS.

I want to make a simple POST, using Angular. This POST should post a couple of values to my server, where I can see them using console.log.

In my HTML code, I build it with the ng-model and a button that has a ng-click.

I can tell my Node.js server is being hit, as it outputs the post called in the console.

However, I have been trying to read about how to read the POST values, but I haven't found a solution.

How would I modify my code to read serialKey and gameTitle in my Express.js endpoint?

My HTML code:

<div class="input-group" ng-controller="CreateController">
    <p>Serial key:<br/>
        <input class="form-control"  ng-model="serialKey" />
    </p>

    <p>Game:<br/>
        <input class="form-control" ng-model="gameTitle" />
    </p>

    <span class="input-group-btn">
        <button class="btn btn-default"
        ng-click="postNewIsbn(serialKey,gameTitle)">Add</button>
    </span>
</div>

Angular controller code:

app.controller('CreateController',function($scope, $http) {
    var url = '/api/serials';
    $scope.postNewIsbn = function(serial, game) {
        $http.post(url, {
            serial: serial,
            gametitle: game
        })
        .success(function (data) {
            $scope.data.status = 'success';
        })
        .error(function(error) {
            $scope.data.error = error;
        });
    };
});

Express.js endpoint

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

    console.log(req.body);
    console.log('post called');
});

It appears to be the problem of setting content-type header. In your angular application you can set defaultHeaders for your post request just after you initialize the module or in your config function with this line

$httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=utf-8';

Do remember to inject the $httpProvider dependency whereever you setting this header

UPDATE

It may be the case that you need to configure your express in order to use the bodyParser with this line:

app.use(express.bodyParser());

req.param(name)

When attempting to retrieve data passed with the request, the req.param() function checks the following in order to find the parameter:

  1. req.params
  2. req.body
  3. req.query

See the docs here.

Also, try explicitly setting the content-type header in the POST request to "application/json".