使用Express Server的AngularJS路由,路由器被调用两次

时间:2017-07-23 12:42:53

标签: javascript angularjs node.js express routing

我是node和express的新手,我创建了一个简单的angularjs + express应用程序,其中路由应仅通过角度应用,但角度路由器被调用两次。这是我不想要的。当我继续开发时,它也会破坏一些东西。

版本:

  • Angular 1.6.5
  • Angular-router 1.6.5
  • 节点6.10
  • Express 4.15.3

server.js:

let express = require('express');
let app = express();
//make folder accessible for the application
app.use(express.static(__dirname+"/public"));
app.get('/*', function (req, res) {
    res.sendFile('./public/index.html', {root: __dirname});
});
//set port
app.listen(1337);

的index.html

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <base href="/">
    <script src="js/angular.js"></script>
    <script src="js/angular-route.js"></script>
    <script src="controllers.js"></script>
</head>
<body ng-app="app">
    <div ng-controller="MainCtrl">
        <div class="page" ng-view></div>
    </div>
</body>
</html>

controller.js

'use strict';
const app = angular.module('app', ['ngRoute']);
angular.module('app').config(['$locationProvider' ,'$routeProvider',
    function ($locationProvider, $routeProvider) {
        $routeProvider.when('/about', {
            templateUrl: 'about.html',
            controller: 'AboutCtrl',
        }).otherwise('/about');
        $locationProvider.html5Mode(true);
    }
]);
angular.module('app').controller('MainCtrl',[function(){}]);
angular.module('app').controller('AboutCtrl',[function(){}]);

我真的不知道我做错了什么。 html5mode工作得很好。当我停用Html5模式时,路由器仍会被调用两次。

2 个答案:

答案 0 :(得分:0)

在index.html中,使用ng-controller="MainCtrl",因此在controller.js中调用MainCtrl代码。

您还可以在html中指定ng-view,以便使用您的路由器。您将被重定向到网址&#39; / about&#39;因为调用otherwise('/about')并调用了您的AboutCtrl代码。

删除ng-controller="MainCtrl",您的代码只会被调用一次。

答案 1 :(得分:0)

问题已解决。

问题是因为我在此blog条目中异步引导应用程序。 他注入了角度以获得“$ http服务”并从服务器获取一些数据。之后,他引导了应用程序。 在我删除了注入角度并将其更改为普通的ajax请求后,它就起作用了。

这只发生在Nodejs后端。当我有一个PHP后端一切正常,注入角度。