前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >express框架中app.use和app.all的区别

express框架中app.use和app.all的区别

作者头像
OECOM
发布2020-07-01 16:56:39
1.7K0
发布2020-07-01 16:56:39
举报
文章被收录于专栏:OECOMOECOM

在使用express框架时,在app.js中经常会发现app.use和app.all的身影,下面我们来看一下这两者期间有什么共同点和不同点。

先来看一段代码示例:

代码语言:javascript
复制
const express = require('express');
const app = express();

app.use('/a',function(req,res,next){
    console.log('111');
    next();
});
app.all('/a',function(req,res,next){
    console.log('222');
    res.end("执行完毕")
});

当我们请求/a路由时,会依次输出111和222,然后浏览器端显示执行完毕。

app.use

app.use一般情况下主要应用于中间件,use('/a') 只用路径以 /a 开始即可匹配,如果有路径 /a/b 、 /a/b/c ,都会经过该函数处理,也就是说都会输出111,相当于自带匹配效果

app.use前面的路径是可以省略的,如果省略的话则代表匹配所有路径,所以一般应用于中间件的处理,比如说网站启用GZip压缩:

代码语言:javascript
复制
const compression = require('compression');
app.use(compression());

如果我们想对以某个字符串开头的路径做处理,我们可以按下面的方式写,以session为例:

代码语言:javascript
复制
const session = require("express-session")
app.use("/hehe",session({
    name: 'sessionID',//存储在用户cookie中的key名
    secret: 'secret',  // 用来对session id相关的cookie进行签名
    //store: new FileStore(),  // 本地存储session(文本文件,也可以选择其他store,比如redis的)
    saveUninitialized: false,  // 是否自动保存未初始化的会话,建议false
    resave: false,  // 是否每次都重新保存会话,建议false
    cookie: {
        maxAge: 20*60 * 1000  // 有效期,单位是毫秒
    }
}))

app.all

app.all其实是和app.get和app.post类似,它是app.get和app.post等的一个统一函数,可以接收任何的请求,路径匹配的是完整路径,如果要匹配以某个字符串开头,则后面添加* 即可,所以app.all('* ',(req,res,next)=>{})和app.use((req,res,next)=>{})效果是相同的。但是在一般情况下,为了好识别和解读程序代码,最好还是让其按语义来执行。app.all的一个用途是可以处理跨域请求:

代码语言:javascript
复制
app.all('/*',(req,res,next)=>{
     res.header("Access-Control-Allow-Origin", "*");

    res.header("Access-Control-Allow-Methods","*");
    res.header("X-Powered-By",' 3.2.1');
    res.header("Content-Type", "application/json;charset=utf-8");
    next();
})
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-05-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • app.use
  • app.all
相关产品与服务
消息队列 TDMQ
消息队列 TDMQ (Tencent Distributed Message Queue)是腾讯基于 Apache Pulsar 自研的一个云原生消息中间件系列,其中包含兼容Pulsar、RabbitMQ、RocketMQ 等协议的消息队列子产品,得益于其底层计算与存储分离的架构,TDMQ 具备良好的弹性伸缩以及故障恢复能力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档