node.js express get与use的区别

本文详细对比了Express中app.get和app.use在处理函数调用next('route')时的行为差异。通过实例展示了当使用next('route')时,app.get如何跳过剩余的handler,而app.use则为每个handler创建独立的route。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

app.get(path, handlers…)
app.use([path, ]handlers…)
除了use的path参数可选之外,它们非常相似,都可以接收多个处理函数handlers,本文专门讲它们的处理函数在调用next(‘route’)的差别。直接举例更好理解:

const express = require('express')
const app = express()

app.get('/user/:id', function (req, res, next) {
    if (req.params.id === '0')
        next('route')
    else
        next()

}, function (req, res, next) {
    res.send('regular')
})

app.get('/user/:id', function (req, res, next) {
    res.send('special')
})

app.listen(3000, () => console.log('Example app listening on port 3000!'))

http://localhost:3000/user/0
=> special
http://localhost:3000/user/xxx
=> regular
如果第一个app.get改成app.use,输出结果都是regular。

我分析,app.use为每一个handler创建了一个route,哪怕你把多个handler放在一个app.use调用中。而app.get(post等一样)为整个handlers创建了一个route, next(‘route’)会跳过其余的handler。换句话说,app.get创建了一个子栈(sub-stack),把每个handler push一个route进了子栈,然后把子栈作为一个route push进当前栈,而app.use在当前栈为每个handler push一个route进栈。
画个图就更清楚了:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值