express

本文详细介绍了如何在Express中使用get、post、put和delete方法进行路由配置,包括app.all()方法,以及响应方法如res.download()、res.end()等。同时涵盖了中间件的概念和如何正确调用next()函数,以及如何通过router进行路由挂载和中间件的绕过技巧。

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

安装

npm install express --save

用法

const express = require('express')
const app = express();
app.get('/news',(req,res,next)=>{
    console.log(1)
    res.status(200)
    res.end()
    next()
},
(req,res,next)=>{
    console.log(2)
    next()
})
const port = 5008;
app.listen(port,()=>{
    console.log('服务以启动')
}
)

路由

格式: app.METHOD(PATH, HANDLER)

app是express的一个实例。
METHOD是一个HTTP请求方法,小写。
“PATH”为服务器上的路径。
HANDLER是匹配路由时执行的函数。

Express支持以下与HTTP方法同名的路由方法:

  1. checkout
  2. copy
  3. delete
  4. get
  5. head
  6. lock
  7. merge
  8. mkactivity
  9. mkcol
  10. move
  11. m-search
  12. notify
  13. options
  14. patch post
  15. purge
  16. put
  17. report
  18. search
  19. subscribe
  20. trace
  21. unlock
  22. unsubscribe

get方法

app.get('/', function (req, res) {
  res.send('Hello World!')
})

postt方法

app.post('/', function (req, res) {
  res.send('Hello World!')
})

put方法

app.put('/', function (req, res) {
  res.send('Hello World!')
})

delete方法

app.delete('/', function (req, res) {
  res.send('Hello World!')
})

app.all()

匹配所有方法

响应

app.get('/example/a', function (req, res) {
  res.send('Hello from A!')
})

响应方法

res.download()提示需要下载的文件。
res.end()结束响应过程。
res.json()发送一个JSON响应。
res.jsonp()发送一个支持JSONPJSON响应。
res.redirect()重定向请求。
res.render()渲染一个视图模板。
res.send()发送各种类型的响应。
res.sendFile()以字节流的形式发送一个文件。
res.sendStatus()设置响应状态代码并将其字符串表示形式作为响应体发送。

中间件

处理函数实际就是一个中间件,一个方法可以有多个处理函数,他们需要依次传递,需要使用第三个参数next,next是一个回调函数,

app.get('/news',(req,res,next)=>{
    console.log(1)
    res.status(200)
    res.end()
    next()
}

请注意上面对next()的调用。调用这个函数调用应用程序中的下一个中间件函数。next()函数不是Node.js或Express API的一部分,但是传递给中间件函数的第三个参数。next()函数可以命名为任何名称,但按照约定,它总是命名为“next”。为避免混淆,请始终使用此约定

app.get('/news',(req,res,next)=>{
    console.log(1)
    next()
},
(req,res,next)=>{
    console.log(2)
    next()
}

注意:如果有多个中间件传递时,如果没有res.end(),服务器会返回404
必须要在某个中间件结束响应,后续的中间件也会运行

app.get('/news',(req,res,next)=>{
    console.log(1)
    res.status(200)
    res.end()
    next()
},
(req,res,next)=>{
    console.log(2)
    next()
}

如果之前已经结束响应,在之后的中间件中就不能在使用完成响应的api

绕过中间件

app.get('/news',(req,res,next)=>{
    console.log(1)
    res.status(200)
    res.end()
    next('router')
},
(req,res,next)=>{
    console.log(2)
    next()
}

在next函数参数中传递router ,这样就会绕过后面的中间件,执行后面的路由

router

在express对象中有一个Router()方法,用来创建一个路由router,
被创建的router路由也是一个中间件,用在app.use(router)当中,
被创建的router路由也具备路由功能,可以调用路由的各种方法,
app.use(router) 会自动匹配并调用router.method()

用法

var express = require('express')
var app = express()
var router = express.Router()
//第一步 先使用router各种方法创建路由,
router.get('/',function(req, res,next){
  console.log('router')
  next()
})
//第二部,使用app.use(router) 挂载
app.use('/news',router)

注意:app.use(baseUrl,router) ,中的路径会作为router.method()基路径,只有匹配到baseUrl,这个路由才会起作用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值