我仍然不知道这些终点之间的区别,终点都是路线,但是我不知道何时何地应该使用它?在什么情况下?
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')
});
我,你们可以帮我解决这个问题。
答案 0 :(得分:0)
.use()和.get()的区别是.use()将侦听任何类型的请求,.get()仅侦听GET请求,例如.post().put()等。
对于路由器,您可以将其视为子路由。
例如,您可以执行以下操作。
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
当然,您可以在同一应用中拥有多个路由器。这样您的代码可以更加结构化。
答案 1 :(得分:0)
默认情况下,.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);