我正在使用这个JS运行一个测试Node服务器,我将在下面发布。我的主要问题是:我正在使用angular的ngRoute创建一个路由('/login'),但是当我访问路由时,它没有显示正确的templateUrl ?查看下面的代码
server.js
var express = require('express'),
app = express(),
mongoose = require('mongoose'),
bodyParser = require('body-parser'),
apiRouter = require('./app/routes/api.js');
mongoose.connect('localhost', 'triviaattack');
app.use(bodyParser.urlencoded({ extended: false }));
app.use(apiRouter);
app.use(express.static('public'));
app.use('*', function(req, res, next) {
res.sendFile(__dirname + '/public/index.html');
next();
});
app.listen(1337);
console.log(' 33[2J');
console.log('Server started!');
如你所见,我有一个Node路由器外部文件API .js,其中包含一些API路由。我有一个catchall返回/public/index.html,这个文件加载了angular、angular-route和我的angular应用。
index . html
<!DOCTYPE html>
<html ng-app="myApp">
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.4/angular.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.4/angular-route.min.js"></script>
<script src="./app/app.js"></script>
</head>
<body>
<div ng-controller="LoginCtrl">
<a href="/login" ng-if="!loginData.isLoggedIn">Login!</a>
<p ng-if="loginData.isLoggedIn">Welcome, you are logged in as {{ loginData.username }}</p>
</div>
</body>
</html>
最后,这里是我的小测试angular应用程序,它在上面的index.html中使用相对路径。/app/app.js
app.js
var myApp = angular.module('myApp',['ngRoute']);
myApp.controller('MainCtrl', ['$scope', function($scope) {
}]);
myApp.controller('LoginCtrl', ['$scope', function($scope) {
$scope.loginData = {
username: '',
password: '',
isLoggedIn: false
}
}]);
myApp.config(['$routeProvider',
function($routeProvider) {
$routeProvider.
when('/login', { //Doesn't show!?!?!?!
templateUrl: './app/views/login.html',
controller: 'LoginCtrl'
});
}]);
console.log('app.js loaded!');
正如@charlieftl在评论中所说,你需要在你的url中包含/#/
,这样angular的路由系统才能正常工作。但是,您也可以使用html5Mode
来使原始请求工作。
只需注射$locationProvider
,并使用:
$locationProvider.html5Mode(true);
你可以阅读更多关于它:
- locationProvider美元
- https://scotch.io/quick-tips/pretty-urls-in-angularjs-removing-the-hashtag
这将允许您在url中不需要#
。