The controller with the name 'mainController' is not registered

The code is following an obsolete example.

Migrating from 1.2 to 1.3

Controllers Due to 3f2232b5, $controller will no longer look for controllers on window. The old behavior of looking on window for controllers was originally intended for use in examples, demos, and toy apps. We found that allowing global controller functions encouraged poor practices, so we resolved to disable this behavior by default.

To migrate, register your controllers with modules rather than exposing them as globals:

Before:

function MyController() {
  // ...
}

After:

angular.module('myApp', []).controller('MyController', [function() {
  // ...
}]);

-- AngularJS Developer Guide -- Migrating from 1.2 to 1.3


You need to register your controller with as like this in your script.js file

var app = angular.module('myApp', []);
 app.controller('mainController', function($scope) {
  $scope.message= "msg";

   });

To paraphrase http://www.w3schools.com/angular/angular_modules.asp

 <div ng-app="myApp" ng-controller="mainController">
{{ firstName + " " + lastName }}
</div>

<script>

var app = angular.module("myApp", []);

app.controller("mainController", function($scope) {
    $scope.firstName = "John";
    $scope.lastName = "Doe";
});

</script> 

The important line is

    app.controller("mainController", function($scope) 

which injects your controller into your app