2017-08-07 9 views
2

.get()を機能させるのに問題があります。 .use()はより適切です(適用する特定のURLを選択する)。Expressで特定のパスを指定する

In私の例では、「すべてのページに適用」を任意のページ番号に表示したいと思いますが、「/ 28」と入力すると.getメッセージが代わりに表示されます。今すぐ/ 28に行っても.useメッセージが表示されます。 docsから

router.use('/:id', function(req, res){ 
    console.log("Things " + Date.now()); 
    res.send('Applies to all pages ' + req.params.id); 

}); 


router.get('/28', function(req, res){ 
    res.send('Secret 28 page'); 
}); 
+0

使用であり、アプリケーション全体のためのもので、取得するパスがパスを使用するために追加されることを意味する特定のAPIの1つです。たとえば、コードはパス '/ {some_id/28}'とgetメソッドを一致させます。唯一の例外として「すべてのページに適用」というものに応答する場合は、if文を作成して( '/:id'、()=> {28が何かをしたら、それ以外は何か} )、使用を取り除くと、デフォルトで '/'が使用されます。 – Jason

答えて

1

use方法は、あなたの急行appから一定pathへのすべてのhttp動詞を採用するかrouterを表現するために使用されています。 useを使用している間は、優先順位を考慮する必要があります。ここでは、すでにuseをダイナミックルータにrouter.use('/:id', ...)として雇用しており、getのリクエストも受け取ります。

getルータを最初に使用することができます。したがって、の要求は/28になり、未処理の要求はすべて別のパスに転送されます。

router.get('/28', function(req, res){ 
    res.send('Secret 28 page'); 
}); 

router.use('/:id', function(req, res){ 
    console.log("Things " + Date.now()); 
    res.send('Applies to all pages ' + req.params.id); 

}); 
1

あなたは(router.useとミドルウェアを定義する順序は)非常に重要です。これらは順番に呼び出されるため、この順序でミドルウェアの優先順位が定義されます。

この例では、'/:id'がマッチングの際に優先されます。

あなたの例を修正するために順序を入れ替えてください。一般に、より具体的なハンドラを最初に定義してください。

1

.getの順番を入れ替えてみてください。 実行時にExpressJSが順番に実行されます。また、 https://derickbailey.com/2016/05/09/in-what-order-does-my-express-js-middleware-execute/

少し無関係いますが、(最初に.getのミドルウェアを使用して、次のであるあなたのコールバックに三番目のパラメータを使用して次のステップを渡すことができます)、あなたの避難所の場合」:より明確化するために、この記事を読みますそれはすでに知られています。

1

.use()あなたのケースで、それはGETに適用されるので、関係なく、HTTP動詞のすべてのパスに適用されるPOST、PUTと/:idパスとapp.get("/28")で始まる他のすべての要求は、そのような要求

関連する問題