express 的app.use()和app.all()的区别

发布于 2022-09-11 16:29:13 字数 412 浏览 7 评论 0

var express = require('express');
var app = express();

app.use('/a',function(req,res,next){
    console.log('111');
    next();
});
app.all('/a',function(req,res,next){
    console.log('222');
});

我只知道'/a','/a/b' app.use()都可以打印111 ,但是 app.all()只能识别'/a'..请问他们之间还有什么区别没?
app.use('/',callback)和app.all('*',callback)有什么区别没?

搜索了下app.use()和app.all()的区别,网上的答案看的云里雾里。麻烦知道的解答下

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

帅的被狗咬 2022-09-18 16:29:13

use通常是用作中间件的
all是路由中指代所有的请求方式,如all('/a'),能同时覆盖:get('/a') 、 post('/a')、 put('/a') 等

当然还有前面的回答,匹配的问题。
use由于是做中间件,use('/a') 只用路径以 /a 开始即可匹配,如 /a/b/a/b/c 都会应有后面的处理函数。 use见到最多的情况应该是直接 use((...)=>{...}),标识匹配路径是 / 开头,即所有的。
all则是具体的路由,直接使用字符串的方式,则匹配的是 /a这 个路径。 仅能匹配 /a, 以下请求路径都是无效的:/a/b/a/b/c ...

碍人泪离人颜 2022-09-18 16:29:13

app.use()接受一个或者多个回调函数作为中间件。中间件通常不处理请求和响应(技术上可以处理)。中间件往往处理输入数据然后传递请求到下一个中间件。比如处理 header,cookies,sessions等。
执行顺序按照书写顺序。必须写在app[method]之前,否则不执行。
app.use([path],[callback1[,callback2]]),path默认/,会匹配以/开头的路径,不接受正则,完整路径的剩余路径,在回调函数里。

app.all(path,[callback1[,callback2]]):可接受多个回调函数作为路由处理器,往往要处理请求响应path匹配完整路径,接受正则,匹配所有方法,执行顺序按照顺序。
app.all(path,callback1,callback2)等同于
app.all(path,callback1)app.all(path,callback2),2在后面。

概况起来:
app.use用作中间件,调用顺序是书写顺序。
app.all用作路由处理,匹配完整路径,在app.use之后。
use的path为路径开头,回调函数的路径为路径的声誉部分,use的路径是完整的了,回调只需要写/,即回调执行的完整路径usePath+callbackPath
all的回调函数的路径必须和app的路径一致。

app.use( "/product" , mymiddleware);
// will match /product
// will match /product/cool
// will match /product/foo
// 匹配的完整路径是 use 的路径加 mymiddleware 的路径
// use 的路径是 /path1, mymiddleware 路径是 /path2,那么路径为 /path1/path2 时,会调用 mymiddleware。
// 回想一下我们初始化一个 express 项目时,`app.use('/users', users);` 
// `router.get('/', function(req, res, next) {
  res.render('index', { title: 'Express' });
});`
//这里匹配的路径实际是 `/users/`
app.all( "/product" , handler);
// will match /product
// won't match /product/cool   <-- important
// won't match /product/foo    <-- important

app.all( "/product/*" , handler);
// won't match /product        <-- Important
// will match /product/
// will match /product/cool
// will match /product/foo

app.use('/',callback)和app.all('*',callback)的区别?

'/',是根路径了,那么所有路径进来,都会执行 callback,'/' 也是 use 的默认 path,callback 是否执行,要看 callback的路径前加上'/'和实际路径是否匹配。
*是一个正则,匹配所有路径,但是只要一个路径进来,可能都会执行 callback。

留蓝 2022-09-18 16:29:13

参数是字符串的情况下
app.use只查看路由是否以指定的路径开头
app.all匹配完整的路径
我觉得可能是语义上的区别吧,一个是设置路由,一个是设置中间件
中间件通常不处理请求和响应,只处理输入数据,并将其移交给队列中的下一个处理程序。
https://stackoverflow.com/que...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文