我仍然不知道这些终点之间的区别,终点到底都是路线,但是我不知道何时何地应该使用它?在什么情况下?
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()
有两个主要区别。
.get()
仅匹配GET请求,.use()
将匹配任何类型的请求(POST,PUT,GET等).use()
的路径,则它的匹配更为自由,如果路径“开始”与传递给.use()
的路径匹配,它将匹配。这样可以完成操作,因此您可以设置一个中间件处理程序,该处理程序将针对广泛的URL触发,而不仅仅是单个URL。 .get()
通常与受约束的URL(例如一个特定的URL)一起使用。 app.get()
与router.get()
几乎相同。 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);