2

Express サーバーを備えた node.js バックエンドがあります。すべての get リクエストを angular アプリにデフォルト設定し、angular ルーティングを使用してリクエストを処理したいと考えています。Express サーバーは、angular アプリからのすべての API 呼び出しを処理します。すべての API 呼び出しを上部に、次のコードを下部に配置して高速ルートを設定しました。

app.get('*', function(req, res){
    res.sendfile('index.html', { root: path.resolve(__dirname + '/../../app') });
});

これは、デフォルトのホームページではうまく機能しますが、偽のフォルダがある場合はうまく機能しません。例えば

www.example.com (works)
www.example.com/product1 (works)
www.example.com/products/1 (does not work)

私の HTML ファイルは、次の構造を使用してスクリプトを参照しています。

<script src="scripts/app.js"></script>

偽のフォルダー (www.example.com/products/1) で URL にアクセスしようとすると、次のエラーが表示されます: ファイル 'products/scripts/app.js' が見つかりません</p>

URL のフォルダーを使用してファイルを見つけようとしています。これを解決する方法はありますか?または、角度の代わりにルーティングにエクスプレスを使用する必要がありますか?

4

3 に答える 3

3

<base href="/">HTML ドキュメントの head に追加してみてください。これは私にとって同じ問題を解決しました。

于 2013-03-18T20:19:32.823 に答える
2

angular-express-seedは、angular と express を使い始めるのに最適です。

app.js

app.get('*', routes.index);

ルート.js

exports.index = function(req, res){
  res.render('index');
};

翡翠を使う必要はありません。任意のテンプレート エンジンを使用することも、静的な html ファイルのみを使用することもできます。res.sendfileファイルをキャッシュしないため、本番環境では使用しないでください。シードには、クライアントとサーバー間の json 通信を示す例もあります。

exports.name = function (req, res) {
  res.json({
    name: 'Bob'
  });
};

ルーティングに Express を使用すると、シングル ページ アプリの感覚が失われます。

于 2013-03-02T20:58:52.787 に答える
0

HTML でスクリプト (および CSS ファイル) に絶対パスを指定します。

<script src="/scripts/app.js"></script>
于 2013-06-10T09:51:44.340 に答える