Javascript expressjs中app.use()、app.get()、router.get()和router.use()之间的区别是什么?
我仍然不知道这些终点和终点之间的区别,它们都是路线,但我不知道何时何地应该使用它?在什么情况下Javascript expressjs中app.use()、app.get()、router.get()和router.use()之间的区别是什么?,javascript,node.js,express,Javascript,Node.js,Express,我仍然不知道这些终点和终点之间的区别,它们都是路线,但我不知道何时何地应该使用它?在什么情况下 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',
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().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
当然,在同一个应用程序中可以有多个路由器。因此,您的代码可以更加结构化。默认情况下,.use()
与.get()
有两个主要区别
.get()
将只匹配get请求,.use()
将匹配任何类型的请求(POST、PUT、get等).use()
提供一个路径,它在匹配方面会更自由,并且如果路径“开始”与传递给.use()
的路径匹配,它就会匹配。通过这种方式,您可以设置一个中间件处理程序,该处理程序将针对广泛的URL集而不是单个URL启动.get()
更常用于受约束的URL,如一个特定的URLapp.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);