2017-06-22 15 views
0

Expressでapp.get()について質問があります。この関数は、パスの末尾に.htmlがある場合は必ず呼び出されないようです。下記のスニペットで/random/exampleに行くと"test"がコンソールに書き込まれますが、/index.htmlに行くと表示されません。だから、私がホームページに行くとき、それをどのように関数に呼び出すのですか? (私はパスとして「/」を試してみた、それはどちらか動作しません。)Node.js express app.get()odd behavior

app.use(express.static("public")) 

app.get('/index.html',function(req,res){ 
    console.log("test"); 
}) 

app.get('/random/example',function(req,res){ 
    console.log("test"); 
}) 
+0

'app.static'はどこかで定義しましたか? – GilZ

+0

質問のStack Snippetを単なるコードブロックに変換しました。スタックスニペットは、スニペットウィンドウ(ブラウザなど)で実行できるものの例です。サーバーサイドでしか動作しないコードは、スタックスニペットに入れないでください。 –

+0

index.html(これまで使用されていた静的リソースの大部分のように)ブラウザにキャッシュされていて、サーバから明示的に要求されていない可能性があります。 –

答えて

0

そのプロセスは、静的ファイルの処理によって自動的に処理されているので、あなたが/index.htmlため"test"が表示されません。

のコードに静的処理が必要な場合は、静的処理を設定する前にルートを定義する必要があります。あなたのルートは、効果的にミドルウェアで、静的な取り扱いとなります取り扱いの次の層に渡すためにnextを呼び出す前に処理を行うことができます。

var express = require('express'); 
var app = express(); 

// Set this up first 
app.get('/index.html',function(req,res, next){ 
    console.log("test - /index.html"); 
    next(); // <== Let next handler (in our case, static) handle it 
}); 

app.get('/random/example',function(req,res){ 
    console.log("test /random/example"); 
}); 

// Now define static handling 
app.use(express.static("public")); 

app.listen(3000, function() { 
    console.log('Example app listening on port 3000!') 
}); 

これはMiddleware callback function examplesへのリンクをgetに記載されています。

注:index.htmlをブラウザに配信したい場合は、これを行う必要はありません。要求を静的ファイル処理に渡す前に、要求にフックする必要がある場合にのみ行う必要があります。

+0

ありがとう、これはとても役に立ちました。 – Torstein97