2013-03-24 28 views
138

我對express和node.js很陌生,我無法弄清楚app.use和app.get之間的區別。看起來你可以使用它們兩個來發送信息。例如:express.js中app.use和app.get之間的區別

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

似乎是相同的,因爲這:

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

看起來你有三種不同的回答「對所有請求運行此」,所有貢獻一些話題:)這是一個相關的問題http://stackoverflow.com/questions/11321635/node-js-express-what-is-app-use – 2013-03-24 17:57:50

+0

是的,所有的好答案。謝謝,我會看看這個。 – 2013-03-24 18:02:37

回答

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()將要與/開頭的路徑,這是所有這些,無論迴應HTTP的使用動詞:

  • GET /
  • PUT /foo
  • POST /foo/bar

app.get(),在另一方面,是快車application routing的部分,並用於當與GET HTTP請求的動詞匹配和處理特定路線:

  • GET /

而且,等效路由爲您的app.use()例子其實是:

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

提及嵌入式應用程序的榮譽。這是組織快遞中間件的一種非常方便的方式。 – wprl 2013-03-24 19:25:13

+4

公平地說,app.use可以完成app.get,app.post,app.put中的每一件事,但反之亦然? – ngungo 2014-04-30 12:58:51

+0

仍難以理解。 – Jeb50 2017-08-24 18:15:44

19

app.getHTTP method設置爲GET被調用,而app.use而不管稱爲HTTP方法的,因此限定了它位於快遞包所提供的所有其他RESTful類型之上。

+0

好用除了()。 – Jeb50 2017-08-24 18:35:35

30

app.use是從連接,中間件框架,快遞依賴於「低級別」的方法。

這裏是我的準則:

  • 使用app.get如果要公開一個GET方法。
  • 如果您想添加一些中間件(在HTTP請求到達您在Express中設置的路由之前的處理程序),或者您想使路由模塊化(例如,公開來自npm模塊的一組路徑,其他web應用程序可以使用它們)。
+0

但是,如果我不在乎方法,我可以使用'app.use'來處理一些路線?或者我們不應該使用'app.use'進行路由。 – Elemento0 2015-09-25 16:38:10

+0

您可以使用app.use將您的路線移至單獨的文件eq。 users.js,buildings.js – 2016-05-09 13:56:38

+0

雖然上面的一個答案已經收集了更多的UP/AGREE,但您的答案將包括中間件在內的複雜的東西轉化爲一些簡單的單詞,kudo。 – Jeb50 2017-08-24 18:21:07

23

簡單 app.use意味着
app.get意思是「GET請求執行此,對於給定的URL」