#
HTML5 スタイルの URL (つまり、URL にフラグメントがない) を使用して AngularJS アプリを作成したいと考えています。したがって、Angular アプリのルーティング コントローラー モジュールには、次のようなものがあります。
angular.module('app').config(['$routeProvider','$locationProvider',function($routeProvider,$locationProvider) {
$locationProvider.html5Mode(true)
...
}
$routeProvider
.when('/1/:param', /* do something */)
.when('/2/:param', /* do something else */)
.when('/3/:param', /* do something else again*/);
AngularFunなどの多くの実用的な例では、HTML5 モードを使用していません。のようなリクエストの場合http://localhost:3005/#/1/foo
、
- この部分はExpress によって
http://localhost:3005/
サーバー側で処理されます。/
Express は、Angular 対応のサービスを喜んで提供しますindex.html
- ルートは
/1/foo
Angularのルーターによってクライアント側で処理されます
server.coffee
標準として、以下のような外観を考えてみましょう (コンパイルされ、縮小された Angular ソースを含む静的ディレクトリを提供しますdist
。
express = require 'express'
routes = require './routes'
dir = "#{__dirname}/dist" # sources live here
port = process.env.PORT ? process.argv.splice(2)[0] ? 3005
app = express()
app.configure ->
app.use express.logger 'dev'
app.use express.bodyParser()
app.use express.methodOverride()
app.use express.errorHandler()
app.use express.static dir # serve the dist directory
app.use app.router
routes app, dir # extra custom routes
HTML5 モードを使用すると、URLhttp://localhost:3005/#/1/foo
はhttp://localhost:3005/1/foo
(no more hash #
) になります。今回は URL 全体が Express に傍受され、 以外のルートを定義していないため混乱します/
。
私たちが本当に言いたいのは、URL の後半部分 ( /1/foo
) は、処理のために Angular に「委譲」する必要があるということです。どうすればこれを言えますか?