使用 Node 和 Express 向请求添加属性

问题描述 投票:0回答:3

我有一个 MEAN 申请,我正在使用护照处理身份验证。我想做的正是护照上用户发生的事情,可以通过像

req.user
这样的请求访问。我还没有找到任何解决方案来达到这个结果。你能给我什么建议吗?

express properties request mean
3个回答
19
投票

您可以通过创建中间件并在应用程序中使用它来向请求或响应对象添加属性。例如

// Defining middleware
function myMiddleware(req, res, next) {
  req.myField = 12;
  next();
}
// Using it in an app for all routes (you can replace * with any route you want)
app.use('*', myMiddleware)

现在处理程序中的所有请求对象都将具有

myField
属性。


8
投票

要向请求和响应对象添加额外的属性,您需要扩展响应和请求接口。

index.d.ts 文件用于提供有关用 JavaScript 编写的模块的打字稿类型信息。对于express,index.d.ts 存在于node_modules 文件夹内的@types/express 文件夹中。

使用此链接- https://dev.to/kwabenberko/extend-express-s-request-object-with-typescript-declaration-merging-1nn5


0
投票

您正在询问如何在类型脚本中创建自定义定义以实现这一点 1-在项目的 src 目录(或根目录,如果您愿意)中,创建一个名为 types 的文件夹。该文件夹将保存项目的所有自定义类型定义。 2- 在 types 文件夹内,创建一个名为express 的子文件夹。这是按您正在修改的包组织类型扩展的最佳实践。 3-在express文件夹中,创建一个名为index.d.ts的文件 文件夹结构应如下所示:

src/
└── types/
    └── express/
        └── index.d.ts
4- 在index.d.ts 中,使用声明模块语法从Express 扩展Request 接口。 5-导入任何必要的类型,例如来自 Prisma 的用户 6- 将自定义属性添加到请求接口。

4,5,6步代码将是这样的:

// src/types/express/index.d.ts

import { users } from "@prisma/client"; // Import your custom types, e.g., `users` from Prisma
import { Request } from "express";

export {}

declare module 'express-serve-static-core' {
    interface Request {
        // Add your custom properties here
        prop1?: string; // Example: A custom property of type string
        user?: users;   // Example: B custom property using Prisma's `users` type
    }
}

7-为了让 TypeScript 识别您的自定义类型,您需要配置 tsconfig.json 8-在compilerOptions部分添加typeRoots选项并指定类型文件夹的路径确保自定义类型包含在node_modules中的默认类型之前 代码将是这样的:

{
  "compilerOptions": {
    "typeRoots": ["./src/types", "./node_modules/@types"] // Include custom types before default types
  }
}

这就是创建 req.user 自定义属性所需的全部

© www.soinside.com 2019 - 2024. All rights reserved.