0

当我在 url 中拉localhost:5000/ login 时,我得到Cannot GET /login 。所以 $routeProvider 不工作并加载视图。相反,它正在向服务器发出请求,因此基本上它是将页面获取到服务器。但我不想将页面获取到服务器,而是想加载视图。我的应用结构如下:

lib 
node_modules
public
----js
---------所有js文件,如angular,script.js文件在这里
----stylesheets
---------所有css文件在这里
查看
app.js (主节点文件)
home.html
index,html
login.html
npm-debug.log

我在服务器端使用 app.js 进行了以下设置:

var express = require('express'),
    path = require('path'),
    app = express(),
    server = require('http').createServer(app)
    //io = require('socket.io').listen(server);

app.use(express.static(path.join(__dirname, '/public')));
app.use( app.router );


server.listen(5000);
console.log('listerning to port 5000');

app.use(function(req, res){
    res.sendfile('./index.html', {root: __dirname});
});

在客户端部分,Angular script.js 看起来像这样:

var app = angular.module('app', [])
.config(['$routeProvider','$locationProvider', function($routeProvider, $locationProvider) {

    $locationProvider.html5Mode(true);
    $locationProvider.hashPrefix = '!';

    $routeProvider.when('/login', {
        template: 'login.html', 
        controller: 'LoginController'
    });

    $routeProvider.otherwise({redirectTo: 'login'});
 }]);

我的 index.html 文件有一个指令

我不知道我做错了什么。任何帮助都可能很棒。

4

1 回答 1

0

使用 Angular 的HTML5 模式需要额外的服务器端配置。当您localhost:5000/login在浏览器中输入时,请求首先被发送到服务器,并且服务器必须配置为返回您的index.html文件,而不是login.html您的快速应用程序按照默认行为似乎正在执行的文件。我假设这index.html不是login.htmlAngular 应用程序被引导的地方,并且必须在 Angular 的路由模块可以看到路由之前加载,并根据您的配置/login更新您的指令。ngView$routeProvider

这个 SO 答案看起来在使用 node.js 重写 URL 方面可能很有用。

于 2013-11-07T03:15:14.017 回答