Express框架的路由配置

Express 是一个流行的基于 Node.js 的 Web 开发框架,它可以帮助我们快速搭建一个 Web 应用程序。在 Express 中,路由是一个非常重要的概念。路由指的是根据客户端请求的不同路径和 HTTP 方法来执行不同的处理逻辑。在本篇博客中,我们将介绍如何在 Express 中进行路由配置。

1.基础路由配置

在 Express 中,我们可以通过调用 express() 函数来创建一个应用程序实例。然后,我们可以使用该实例的 get()post()put()delete() 等方法来配置路由。这些方法接收两个参数:路径和处理函数。

 在上面的示例中,我们定义了两个路由:根路径和 /about 路径。当客户端请求根路径时,处理函数将返回一个字符串 Hello, World!,而当客户端请求 /about 路径时,处理函数将返回一个字符串 About us

2.动态路由配置

除了静态路由之外,我们还可以定义动态路由。动态路由指的是带有参数的路由,例如 /users/:userId,其中的 :userId 是一个动态参数,可以匹配不同的用户 ID。在 Express 中,我们可以使用冒号 : 来定义动态参数。

 在上面的示例中,我们定义了一个动态路由 /users/:userId,当客户端请求该路径时,Express 将会调用处理函数,并将匹配的参数值存储在 req.params.userId 属性中。在处理函数中,我们可以通过 req.params.userId 来获取该参数值,并向客户端返回一个包含该参数值的字符串。

3.路由中间件

除了基本路由和动态路由之外,我们还可以使用路由中间件来对路由进行拦截和处理。路由中间件指的是一个函数,它可以在请求到达路由处理函数之前或之后对请求进行处理。

在 Express 中,我们可以使用 app.use() 方法来注册路由中间件。

在上面的示例中,我们定义了一个路由中间件,它会在每个请求到达之前打印当前时间。在处理完中间件逻辑之后,我们需要调用 next() 方法来将请求传递给下一个处理函数。如果我们不调用 next() 方法,请求将会被中断,客户端将会收到一个空白响应。

4.错误处理

在 Express 中,我们可以使用 app.use() 方法来定义错误处理中间件。错误处理中间件指的是一个函数,它可以在发生错误时对错误进行处理,并向客户端返回一个错误响应。

 在上面的示例中,我们定义了一个错误处理中间件,它会在发生错误时打印错误堆栈信息,并向客户端返回一个状态码为 500 的错误响应。

5.跨域处理

响应头部-Access-Control-Allow-Origin

'*'代表开放所有的外域url,也可以指定每个url,如 "http://localhost:8081"

响应头部-Access-Control-Allow–Headers

设置允许请求头

响应头部-Access-Control-Allow–Methods

设置允许请求的方法,如GET,POST等待.

在发送真正的请求前,会先发送一个方法为 OPTIONS的预请求,用于试探服务端是否能接受真正的请求.如果options获得的回应时拒绝性质的,如404、403、500等状态,就会停止post、get请求的发出.所以,options成功后才会进行真正的请求.

 6.一个简单完整的Express服务

下面是一个完整的 Express 服务示例

const express = require('express')
const app = express()
//跨域处理
app.all('*', function (req, res, next) {
  res.header('Access-Control-Allow-Origin', '*');
  res.header('Access-Control-Allow-Headers', 'Content-Type');
  res.header('Access-Control-Allow-Methods', '*');
  res.header('Content-Type', 'application/json;charset=utf-8');
  if (req.method.toLowerCase() == 'options')
    res.send(200);  //让options尝试请求快速结束
  else
  next();
});
// 中间件示例:打印当前时间
app.use((req, res, next) => {
  console.log(`Time: ${new Date()}`)
  next()
})
// 动态路由示例
app.get('/users/:userId/books/:bookId', (req, res) => {
  const userId = req.params.userId
  const bookId = req.params.bookId
  res.send(`User ID: ${userId}, Book ID: ${bookId}`)
})

// 错误处理中间件示例
app.use((err, req, res, next) => {
  console.error(err.stack)
  res.status(500).send('出现一些问题!')
})


// 启动服务
app.listen(3000, () => {
  console.log('Example app listening on port 3000!')
})

在上面的代码中,我们定义了一个中间件,它会在每个请求到达之前打印当前时间,然后定义了一个动态路由 /users/:userId/books/:bookId,它可以处理类似 /users/123/books/456 这样的请求,并从中获取到 userId bookId 参数,最后向客户端返回一个包含这两个参数的响应。最后,我们定义了一个错误处理中间件,它会在发生错误时打印错误堆栈信息,并向客户端返回一个状态码为 500 的错误响应,同时在进行了跨域处理,解决请求时出现跨域而报错.

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卷小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值