2013-02-24 10 views
6

できるだけ詳細を説明します。ExpressとAngularJS - ホームページを開こうとするとウェブページがフリーズする

ExpressでAngularJSを使用しようとしていますが、問題が発生しています。 HTMLファイルを表示したいです(テンプレートエンジンを使用しない)。これらのHTMLファイルには、AngularJSディレクティブがあります。
しかし、私は単純なHTMLファイル自体を表示することができません!次のように

ディレクトリ構造は以下の通りである:

Root 
---->public 
-------->js 
------------>app.js 
------------>controllers.js 
---->views 
-------->index.html 
-------->partials 
------------>test.html 
---->app.js 

public/js/app.jsの内容は次のとおり

angular.module('myApp', []). 
    config(['$routeProvider', function($routeProvider) { 
    $routeProvider.when('/', {templateUrl: 'partials/test.html', controller: IndexCtrl}); 
$routeProvider.otherwise({redirectTo: '/'}); 
}]); 

public/js/controllers/jsの内容は次のとおり

function IndexCtrl() { 
} 

bodyタグの内容views/index.htmlの場合:

<div ng-view></div> 

これだけです。

This is the test page! 

段落タグで囲ま:views/partials/test.htmlその内容がある - 期待がAngularJSはtest.htmlというと共に上記のビューを代用することです。それでおしまい!

最後に、ROOT/app.jsファイルの内容は次のとおりです。今

var express = require('express'); 

var app = module.exports = express(); 

// Configuration 

app.configure(function(){ 
    app.set('views', __dirname + '/views'); 
    app.engine('html', require('ejs').renderFile); 
    app.use(express.bodyParser()); 
    app.use(express.methodOverride()); 
    app.use(express.static(__dirname + '/public')); 
    app.use(app.router); 
}); 

app.configure('development', function(){ 
    app.use(express.errorHandler({ dumpExceptions: true, showStack: true })); 
}); 

app.configure('production', function(){ 
    app.use(express.errorHandler()); 
}); 

// routes 

app.get('/', function(request, response) { 
    response.render('index.html'); 
}); 

// Start server 

app.listen(3000, function(){ 
    console.log("Express server listening on port %d in %s mode", this.address().port, app.settings.env); 
}); 

、私はルートフォルダに$node app.jsを行う際に、サーバがエラーなしで起動します。しかし、ブラウザでlocalhost:3000に行くと、URLはlocalhost:3000/#/に変わり、ページが固まったり凍ったりします。私はChromeのコンソールログをチェックすることすらできません!
これは私が直面している問題です。私が間違っていることについて何か手がかりを?

+0

ブラウザコンソールにはどのようなエラーがスローされますか? – charlietfl

+0

@charlietflおそらく何もありません。ほとんどの場合、ページがフリーズしているように見えるのは、応答が終了していないためです。 – Pickels

+0

'おそらく何もない' ??エラーがスローされるか、エラーがスローされます。 – charlietfl

答えて

8

最後に、髪の毛が引っ張られて激しい瞬間がありました。

  1. ユーザーがローカルホストが起動します::3000
  2. これは '/'
  3. Expressの速達サーバに要求したindex.html
  4. レンダリング(ステップによって説明ステップ)ので
    ページがフリーズする理由は、
  5. AngularJSはテンプレート 'partials/test.html'をレンダリングします。
  6. ここでは、AngularJSが 'partials/test.html'というページのHTTPリクエストを作成しました。
  7. しかし、expressまたはむしろapp.jsにはこのGETリクエストのハンドラがないことがわかります。つまり、次のコードがありません:

    app。 var name = request.params.name;
    response.render( 'partials /' + name);
    })get( 'partials /:name'、function(request、response)

内側app.jsのROOTディレクトリ。このコードを追加すると、ページは期待どおりにレンダリングされます。

+0

別の(より良い)解決策は、あなたの部分をあなたの 'public'フォルダに置くことです。そのため、ルータ/アプリスタックを経由せずに、特定の経路を作成することなくスタティックミドルウェアによって提供されます。エクスプレスからインデックスページをダウンロードし、DOMとAngularをロードし、Httpリクエストを呼び出して部分を取得し、Javascriptを実行してページをレンダリングする必要があるため、システムが非常に遅くなることに注意してください。かなり複雑で遅いIMO。 – jtblin

+0

@jtblinあなたのソリューションは、あなたのテンプレートが公開されているときに適用可能だと思います...私の場合、それらは制限されており、適切な権限でしかアクセスできません... – callmekatootie

0

this working fiddleのデザインパターンに従ってください。以下に示すコード。テンプレートオプションをtemplateUrlに置き換えることはできますが、それでも正常に動作するはずです。

var app = angular.module('app', []); 

app.config(['$routeProvider', function($routeProvider){ 
    $routeProvider.when('/', {template: '<p>Index page</p>', controller: 'IndexCtrl'}); 
    $routeProvider.otherwise({redirect:'/'}); 
}]); 

app.controller('IndexCtrl', function(){ 

}); 
+0

私はapp.js内の 'app.config()'とcontrollers.jsファイル内の 'app.controller()'を保ちたいと思います。しかし、controllers.jsの内部で、私がローカル変数を使用すると動作しません。理由は分かりません – callmekatootie

関連する問題