0

url でlocalhost:5000/loginを取得すると、Cannot GET /loginが表示されます。したがって、 $routeProvider は機能しておらず、ビューをロードしていません。代わりに、サーバーにリクエストを送信しているため、基本的にはページをサーバーにフェッチしています。しかし、ビューをロードしたい代わりに、ページをサーバーにフェッチしたくありません。私のアプリケーション構造は次のとおりです。

lib 
node_modules
public
----js
---------angular などのすべての js ファイル、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ありません。私は、Angular アプリケーションがブートストラップされる場所ではなく、Angular の route モジュールがルートであることを認識し、構成に基づいてディレクティブを更新する前にロードする必要があると想定しています。login.htmlindex.htmllogin.html/loginngView$routeProvider

この SO の回答は、node.js を使用した URL の書き換えに関して役立つようです。

于 2013-11-07T03:15:14.017 に答える