[英]What is the difference among app.use(), app.get () , router.get() and router.use() in Express js?
我仍然不知道這些端點之間的區別,最終它們都是路線但我不知道我應該何時何地使用它? 在什么場景下?
app.use('/user/:id', function (req, res, next) {
console.log('Request Type:', req.method)
next()
});
app.get('/user/:id', function (req, res, next) {
res.send('USER')
});
router.get('/user/:id', function (req, res, next) {
res.send('USER')
});
router.use('/user/:id', function (req, res, next) {
res.send('USER')
});
我你們可以幫我解決這個問題。
.use()和.get()的區別是.use()會監聽任何類型的請求,而.get()只會監聽GET請求,如.post()。output()等。
對於路由器,您可以將其視為子路由。
例如,你可以做這樣的事情。
router.get('/:id', (req, res, next) => {res.send('user')})
router.post('/', (req, res, next) => {/* some create user logic */})
app.use('/user', router) // if you do this routers will match '/user/:id' and '/user' path
當然,你可以在同一個應用程序中擁有多個路由器。 所以你的代碼可以更有條理。
默認情況下, .use()
與.get()
有兩個主要區別。
.get()
只匹配GET請求, .use()
將匹配任何類型的請求(POST,PUT,GET等......) .use()
的路徑,它的匹配就更自由了,如果路徑“開始”你傳遞給.use()
的路徑,它將匹配。 它以這種方式完成,因此您可以設置一個中間件處理程序,該處理程序將觸發一組廣泛的URL,而不僅僅是一個URL。 .get()
更常用於受限制的URL,例如一個特定的URL。 app.get()
與router.get()
幾乎相同。 app
對象是一個路由器,上面還有一些其他的屬性和方法。 因此,路由器對象中的大多數方法也在app
對象上,但反之亦然。
您可能出於各種原因使用路由器而不是app對象:
一些例子:
// matches /hello and /hello/hi and /hello/goodbye for GET, POST or PUT
app.use('/hello', ...);
// matches only a GET request for /hello
app.get('/hello', ...);
使用路由器來幫助實現模塊化的示例。
其中定義了一些路由的模塊:
// some_routes.js
const router = require('express').Router();
router.use(someMiddlewareForWholeRouter);
router.get('/hello', ...);
router.get('/goodbye', ...);
router.get('/callme', ...);
module.exports = router;
在您的應用中使用該模塊:
// app.js
const some_routes = require('./some_routes.js');
// hook up all routes from some_routes with the path prefix of /greeting
app.use('/greetings', some_routes);
請投票並接受@jfriend00 的回答,這非常有幫助。 (我的聲望不夠)
簡而言之:
對於對象:
express 應用程序可以自己路由,整個代碼庫中只能有一個應用程序,因此如果需要模塊化多個路由而無需傳遞應用程序引用,我們寧願擁有多個路由器並將它們導入根應用程序。
路由器是一種專用的路由工具,您可以擁有多個路由,然后連接到 express 應用程序。
對於現在的方法:
use() 是基本方法的包裝器,您可以在其中指定公共資源,例如跨多個基本端點的中間件,而
get() 用於在其 use() 包裝器中指定的任何指定的先前路由之上指定端點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.