1

Azure (IIS) でホストされ、HTML5 モードを使用する Node.JS の上に構築された AngularJS アプリがあります。Node.JS を使用せず、IIS で AngularJS のみを使用する状況では、IIS の Web.config で次のルールを使用して、ページの更新によって 404 エラーが発生しないように URL を書き換えることができます。

<rule name="AngularJSHTML5Mode" stopProcessing="true">
      <match url=".*"/>
      <conditions logicalGrouping="MatchAll">
        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true"/>
        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true"/>
        <add input="{REQUEST_URI}" pattern="^/(api)" negate="true"/>
      </conditions>
      <action type="Rewrite" url="/"/>
</rule>

ただし、Node.js の上で (ExpressJS を使用して) Angular を使用すると、IIS で上記のルールを使用しても、ページの更新時に "Cannot GET /myroute" などのエラーが発生します。Server.js または Web.config の別のルールで構成する必要があるものはありますか。

これが私が現時点でExpressに持っているものです。Express 4を使用しています:

// Initialize Express App
var app = express();

var listener = app.listen(1337, function () {
    console.log('Listening on port ' + listener.address().port); //Listening on port 1337
});

app.use(express.static(__dirname + "/public"));

実際には、SPA でページの更新を行うべきではないことは理解していますが、実際には発生しており、これを説明する必要があります。

4

2 に答える 2

0

さらに掘り下げたところ、Web構成は必要ありませんでした。Angular インデックス ファイルへの接続を確立するために、server.js にこれを含めます。

var app = express();

app.use(express.static(__dirname + "/public"));


var listener = app.listen(1337, function () {
    console.log('Listening on port ' + listener.address().port); //Listening on port 1337
});

この部分は、すべての GET、POST などの最後に重要です。これを最後の関数として追加しました。これはキャッチオールであるため最後にする必要があり、GET または POST 関数の前に配置すると、Express として認識されず、壊れた Angular ルートと見なされます。App.js が正しく構成されている場合は、ホームページ (不要):

// Placed at end for routing non-Express calls/AngularJS refreshes
app.use('/*', function (req, res) {
    res.sendFile(__dirname + '/public/index.html');
});
于 2015-09-23T15:10:43.417 に答える