app.use()

app.use不仅用于中间件

app.use()方法 (中间件方法)

使用app.use()方法将指定的中间件功能放到指定的路径下,当请求的路径地址(前端发过来的地址)与定义的路由(app.get/post)相同时,就会执行指定的中间件功能。需要注意的是,如果路由有多个子路由同样也会执行对应的中间件函数。

//这种类型的中间件访问什么路由都会执行
app.use((req,res,next)=>{
    console.log('11111')
    next()
})

语法:

  app.use([path], callback, [callback])

参数解析:

  • path : 指定的中间件函数的放的路径(路由地址),可选参数。
  • callback : 指定的中间件函数,可以是多个。并且这些回调函数可以调用next().
 //创建app
const app = express()
 //设置中间件
 app.use("/index",(req,res,next)=>{
     console.log("中间件函数");
     next();
 })
 //设置路由
 app.get('/index',(req,res)={
     console.log("中间件执行完后,执行该函数");
     res.send("end");
 })

与下面代码进行区别 (中间件没有next)


 const app = express()
 //设置中间件
 app.use("/index",(req,res,next)=>{
     console.log("中间件函数");
 })
 //设置路由
 app.get('/index',(req,res)={
     console.log("中间件没有调用next,此函数不会被执行");
     res.send("end");
 })

第一个实例调用了next(),所以能执行路由函数,而第二个例子中没有调用next(),所以不会执行路由函数(中间件没有调用next,此函数不会被执行)

下面我们来看有路由有多个子路由的情况

假如/index还有子路由

  • /index/h
  • /index/x

我们就可以将这三个路由进行封装,暴露出一个路由接口。

 const express = require('express')
 const router = express.Router()
 router.get("/index",(req,res)=>{
     res.send("我是index")
 })
 router.get("/h",(req,res)=>{
     res.send("我是h")
 })
 router.get("/x",(req,res)=>{
     res.send("我是x")
 })
 module.exports = router;

使用时导入路由模块。

 const router = require(./router)
 const express = require('express')
 const app = express()
 ​
 app.use('/index',router)

小结

使用app.use来匹配对应的路由,执行相应的中间件函数==>app.use中的地址应与app.get/post一致才是这个路由的中间件 若没写地址则对全部路由都生效的中间件

注意区分有无next的区别,如果一个路由还含有多个子路由时,可以进行封装,暴露出一个统一的接口。

在我们使用router不用暴露一个统一接口 你的跟路由就是暴露的路由若是这个跟路由则进入router中的index.js

app.use('/', require('./router'))

<think>好的,我现在需要处理用户提出的两个新的单选题,问题11和问题12,都是关于Express中间件和路由方法的。首先,我要确保自己准确理解每个问题的内容和选项,然后找出正确的答案并进行解析。 问题11问的是加载中间件函数使用的方法是什么,选项有app.use(), app.get(), app.all(), app.post()。我记得在Express中,中间件通常使用app.use()来加载,因为它可以处理所有的HTTP方法,并且用于全局中间件。而app.get()app.post()等是用于特定HTTP方法的路由处理,而app.all()则是处理所有HTTP方法的路由,但可能不专门用于中间件加载。不过需要确认一下,app.use()确实是加载中间件的标准方法。 问题12问的是应用程序级中间件绑定到app对象实例的方法是什么,选项包括app.use()app.METHOD()app.all()app.put()app.get()app.post()app.use()app.all()。这里需要明确应用程序级中间件的绑定方式。应用程序级中间件通常通过app.use()app.METHOD()(比如app.get(), app.post()等)来绑定,因为它们允许在应用程序级别应用中间件,无论请求的HTTP方法是什么,或者针对特定方法。而app.all()也是用来处理所有HTTP方法的路由,但可能和app.use()一起使用吗?可能需要进一步确认。 接下来,我需要验证这些知识点。查阅Express官方文档,中间件部分指出app.use()用于加载中间件,适用于所有请求方法。而app.METHOD()函数(如app.get(), app.post())用于路由处理,但也可以作为中间件使用,当不指定路径时,会应用到所有路由。因此,应用程序级中间件既可以通过app.use()加载,也可以通过app.METHOD()绑定到特定方法,但这里的选项中的app.METHOD可能指的是所有HTTP方法对应的函数,比如get、post等。而选项中的app.use()app.METHOD()是否是正确的组合呢? 对于问题11,正确答案应该是app.use(),因为这是加载中间件的主要方法。其他选项如app.get()等是路由方法,虽然它们也可以接受中间件,但主要用途是处理特定路由的请求,而不是加载中间件。 对于问题12,应用程序级中间件使用app.use()app.METHOD()来绑定,例如app.get()app.post()等。因为应用程序级中间件可以针对所有请求或特定方法的请求,所以这两个方法都是正确的。而其他选项中,app.all()可能也属于METHOD的一部分,但通常app.all()用来处理所有HTTP方法的路由,而app.use()是更通用的中间件加载方法。不过官方文档提到应用程序级中间件可以通过app.use()app.METHOD()来绑定,所以正确的选项应该是第一个,即app.use()app.METHOD()。 总结,问题11选app.use(),问题12选app.use()app.METHOD()。</think>### 问题11: 加载中间件函数使用的方法 **正确答案:** **`app.use()` ✅** #### 解析: 1. **`app.use()`的作用**: - **核心方法**:Express 中专门用于加载中间件函数的方法。 - **全局或局部作用**:可作用于所有请求(全局中间件)或特定路径(局部中间件)。 - 示例: ```javascript app.use((req, res, next) => { console.log('中间件已执行'); next(); }); ``` 2. **其他选项排除**: - **`app.get()`/`app.post()`** ❌:用于处理特定 HTTP 方法(如 GET、POST)的路由,并非专门加载中间件。 - **`app.all()`** ❌:用于处理所有 HTTP 方法的路由,但本质上仍是路由处理方法,而非中间件加载方法。 --- ### 问题12: 应用程序级中间件的绑定方法 **正确答案:** **`app.use()` 和 `app.METHOD()` ✅** #### 解析: 1. **应用程序级中间件的定义**: - 通过 `app` 对象实例直接绑定的中间件,影响整个应用或特定路径下的所有请求。 2. **绑定方法详解**: - **`app.use()`**: - 绑定全局中间件,可作用于所有请求。 - 示例: ```javascript app.use(express.json()); // 解析所有请求的 JSON 数据 ``` - **`app.METHOD()`**: - 泛指 `app.get()`、`app.post()` 等针对特定 HTTP 方法的路由处理函数。 - 当不指定路径时,可视为针对该方法的全局中间件。 - 示例: ```javascript app.post((req, res, next) => { console.log('处理所有 POST 请求的中间件'); next(); }); ``` 3. **其他选项排除**: - **`app.all()`** ❌:属于 `app.METHOD()` 的特例(处理所有 HTTP 方法的路由),但需与路径配合使用,不单独作为中间件绑定方法。 - **`app.get()` 和 `app.post()`** ❌:仅为 `app.METHOD()` 的具体实现,表述不完整。 --- ### 总结: - **中间件加载**:始终优先使用 `app.use()`。 - **应用程序级中间件**:通过 `app.use()`(全局)和 `app.METHOD()`(按 HTTP 方法)绑定。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值