2013-03-24 71 views
138

私はexpressとnode.jsの新機能があり、app.useとapp.getの違いを理解できません。両方を使って情報を送ることができるようです。例えば:express.jsのapp.useとapp.getの違い

app.get('/', function (req,res) { 
    res.send('Hello'); 
}); 
+1

が見える「与えられたURLのために、GETリクエストでこれを実行する」を意味し、「すべての要求でこれを実行する」という意味しますトピックに何か寄与:)関連する質問があります。http://stackoverflow.com/questions/11321635/node-js-express-what-is-app-use –

+0

はい、すべての良い答えです。ありがとう、私はそれを見てみましょう。 –

答えて

140

app.use()は、アプリケーションにmiddlewareをバインドすることを意図しています。 pathは、任意のパスに適用する「マウント」または「接頭」経路であるとのみにミドルウェアを制限がそれにを開始することを要求されました。それも、他のアプリケーション埋め込むために使用することができますパス「マウント」として/を指定することで

// subapp.js 
var express = require('express'); 
var app = modules.exports = express(); 
// ... 
// server.js 
var express = require('express'); 
var app = express(); 

app.use('/subapp', require('./subapp')); 

// ... 

を、app.use()は関係なく、それらのすべてとされている、/で始まる任意のパスに反応します

  • GET /
  • PUT /foo
  • :使用されるHTTP動詞の
  • POST /foo/bar

app.get()、一方、application routingエクスプレスの一部であり、GET HTTP動詞で要求されたときに特定のルートを照合し、処理するために意図されている:

  • GET /

そして、同等のルーティングapp.use()のご例えば、実際に次のようになります。

app.all(/^\/.*/, function (req, res) { 
    res.send('Hello'); 
}); 
+2

埋め込みアプリについて言及してください。これは、高速ミドルウェアを整理する非常に便利な方法です。 – wprl

+4

app.useはapp.get、app.post、app.putのすべてすべてを実行できますが、その逆はできません。 – ngungo

+0

まだ分かりません。 – Jeb50

19

app.getHTTP methodGETに設定されている場合app.useがHTTPメソッドに関係なく呼び出され、一方、呼び出され、したがって定義される:

app.use('/',function(req, res,next) { 
    res.send('Hello'); 
    next(); 
}); 

はこれと同じであると思われますエクスプレスパッケージがあなたにアクセス権を与える他のすべてのRESTfulタイプの上にあるレイヤー。

+0

()を使うのに良い。 – Jeb50

30

app.useは、Connect、Expressが依存するミドルウェアフレームワークから「低いレベル」方法です。あなたがGETメソッドを公開したい場合は

  • 使用app.get

    は、ここに私のガイドラインです。

  • ミドルウェア(Expressで設定したルートに到着する前にHTTPリクエストのハンドラ)を追加する場合や、ルートをモジュラ化したい場合は、app.useを使用します(たとえば、公開他のWebアプリケーションが使用できるnpmモジュールからの一連の経路)。
+0

しかし、もし私がこのメソッドについて気にしないなら、 'app.use'を使っていくつかのルートを扱うことができますか?あるいはルーティングのために 'app.use'を使うべきではありません。 – Elemento0

+0

app.useを使用してルートを別々のファイルeqに移動できます。 users.js、buildings.js –

+0

上記の1つの答えがはるかにUP/AGREEに集まっていますが、あなたの答えはミドルウェアを含む洗練されたものをいくつかの簡単な言葉に翻訳します。 – Jeb50

23

は単に app.useはすべて、
app.getは、次の3つの異なる答えを得たよう

関連する問題