我正在尋找一種方法來保存某些物體的資料庫物體更改。我的意思是我需要將在某些表上完成的所有更改(添加、修改/洗掉)保存在資料庫表中,并能夠跟蹤進行更改的用戶。
如果我使用 Prisma 作為 ORM,我正在使用自定義 ExpressJS 服務器和 MYSQL 資料庫開發 NextJS。我認為也許可以撰寫一個 ExpressJS 中間件,但我還不知道該怎么做,并問自己是否已經存在任何庫。
通常我在 PHP Symfony 上作業并用來管理這個StofDoctrineExtensionsBundle,它很棒并且可以按預期作業。但我目前的專案是一個只有 Express/NextJS/React/Prisma/MYSQL 的 Typescript 專案。
非常感謝您對知識的任何反饋。
提前致謝。
問候,
古佛特
編輯:我當前的 API 必須移動到 Express/NextJS 仍在 Symfony 上運行,記錄所有更改的表如下所示:
{
"id": 59807,
"user": "ccba6ad2-0ae8-11ec-813f-0242c0a84005",
"patient": "84c3ef66-548a-11ea-8425-0242ac140002",
"action": "update",
"logged_at": "2021-11-02 17:55:09",
"object_id": "84c3ef66-548a-11ea-8425-0242ac140002",
"object_class": "App\\Entity\\Patient",
"version": 5,
"data": "a:2:{s:10:\"birth_name\";s:2:\"--\";s:10:\"profession\";s:2:\"--\";}",
"username": "johndoe",
"object_name": "patient",
"description": null
}
關于資料庫列的說明:
- 用戶 => 與用戶表的關系
- 患者 => 與患者表的關系
- action => 可以是“創建”/“更新”/洗掉”
- logging_at => 更改完成的日期時間
- object_id => 物體發生變化的物體行 ID
- object_class => 物體更新
- 版本 => 物件更改了多少次
- 資料 => 修改程序中更改的所有資料
- 用戶名 => 登錄用戶的用戶名進行了更改
- object_name => 一個字串,用于標識修改后的物件
- 使用 object_class 的命名空間
- description => 一個可以在某些特定更改上更新的值 * 通常在操作 delete 以跟蹤例如洗掉的內容
uj5u.com熱心網友回復:
您可能會發現prisma 中間件對此很有用。
查看帶有會話資料中間件的示例,該示例與您正在執行的操作有些相似。
對于您的用例,中間件可能如下所示:
const prisma = new PrismaClient()
const contextLanguage = 'en-us' // Session state
prisma.$use(async (params, next) => {
if (params.model == '_modelWhereChangeIsTracked_' && (params.action == 'create' || params.action == "update")) {
// business logic to create an entry into the change logging table using session data of the user.
}
return next(params)
})
// this will trigger the middleware
const create = await prisma._modelWhereChangeIsTracked_.create({
data: {
foo: "bar"
},
})
但是,請注意,使用 Prisma 中間件時有一些性能注意事項。
您還可以為您預期需要記錄在更改表中的更改的路由創建快速中間件。就個人而言,在大多數情況下,我更喜歡這種方法,特別是如果需要記錄更改的 API 路由的數量是預先知道的并且數量有限。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/417373.html
標籤:
上一篇:EJS條件渲染
