如何Request在 TypeScript 中扩展 Express 对象

本文介绍了如何在TypeScript中扩展Express的Request对象,以存储自定义数据并提高代码可维护性。通过创建自定义的index.d.ts文件和定义User、Language类型,中间件可以将用户信息和语言信息添加到Request对象中,使得在控制器中可以直接访问这些信息,简化了业务逻辑。同时,文中提供了具体的中间件和控制器示例,展示了如何在实际应用中使用扩展的Request对象。
摘要由CSDN通过智能技术生成

Express 使用该Request对象向 Node.js 服务器的控制器提供有关 HTTP 请求的数据。因此,应用层可用的请求中的所有数据都依赖于该对象。

您可能需要详细说明您在 HTTP 请求中收到的数据,并向控制器提供自定义信息。在 JavaScript 中,您可以简单地在对象中定义新属性Request并在需要时使用它们。Request在 TypeScript 中,如果要定义自定义属性,则需要扩展类型。

现在让我们了解RequestExpress 中的内容,并深入探讨Request在 TypeScript 中扩展类型有用的原因。然后,让我们看看如何Request通过使用 TypeScript 构建的 Express 演示应用程序来利用扩展对象。

TL;DR:让我们学习如何Request在 TypeScript 中扩展类型以使其实例存储您可以在控制器级别使用的自定义数据。

  • Express 中的 Request 对象是什么?

  • 为什么要扩展请求?

  • 在 TypeScript 中扩展 Express Request 类型

    • 先决条件

    • 将自定义属性添加到请求类型

  • 使用扩展的 Request 对象

  • 测试扩展请求

RequestExpress中的对象是什么?

该Request对象表示客户端对 Express 服务器执行的 HTTP 请求。换句话说,Express 服务器可以通过Request实例读取从客户端接收到的数据。因此,Request有几个属性可以访问 HTTP 请求中包含的所有信息,但最重要的是:

  • query

    :此对象包含请求 URL 中存在的每个查询字符串参数的属性:

    app.get("/users", (req: Request, res: Response) => {
      // on GET "/users?id=4" this would print "4"
      console.log(req.query.id)
    });
  • params

    :此对象包含根据

    Express 路由约定

    在 API URL 中定义的参数:

    app.get("/users/:id", (req: Request, res: Response) => {
      // on GET "/users/1" this would print "1"
      console.log(req.params.id)
    });
  • body

    :此对象包含在 HTTP 请求正文中提交的键值对数据:

    app.get("/users", (req: Request<never, never, { name: string; surname: string }, never>, res: Response) => {
      const { name, surname } = req.body
    ​
      // ...
    })
  • headers:此对象包含请求发送的每个 HTTP 标头的属性。

  • cookies:使用cookie-parserExpress 中间件时,该对象包含请求发送的每个 cookie 的属性

为什么要延长Request?

Express 控制器可以使用该对象访问包含在 HTTP 请求中的所有数据Request。这并不意味着Request对象是与控制器交互的唯一方式。相反,Express 也支持中间件。Express 中间件是可用于添加应用程序级或路由器级功能的功能。

中间件功能与路由器级别的端点相关联,如下所示:

const authenticationMiddleware = require("../middlewares/authenticationMiddleware")
const FooController = require("../controllers/foo")
​
app.get(
  "/helloWorld",
  FooController.helloWorld, // (req, res) => { res.send("Hello, World!") }
  // registering the authenticationMiddleware to the "/helloWorld" endpoint
  authenticationMiddleware,
)

请注意,中间件函数在调用包含 API 业务逻辑的控制器函数之前执行。在此处了解有关它们如何工作以及 Express 中间件可以提供的更多信息。

这里需要注意的重要一点是中间件可以修改Request对象,添加自定义信息以使其在控制器级别可用。iPhone14用户抱怨蓝牙问题、性能问题及潜在问题的修复方法例如&#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

pxr007

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

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

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

打赏作者

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

抵扣说明:

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

余额充值