摘要:如果我可以使用貓鼬模式驗證資料,我應該使用 express-validator 嗎?
我是前端開發人員,通常在提交之前對表單進行一些驗證。現在,我開始學習快遞。
我做的第一件事是接收一個表單并使用一個名為 express-validator 的庫對其進行驗證,然后資料庫操作就完成了。很簡單,沒什么大不了的。然而,在自己做了一個專案之后,我意識到 mongoose 本身可以處理錯誤,不僅如此,而且在前面回傳這些錯誤非常容易,尤其是在 api 的情況下。
所以這是我的疑問,為什么要多次驗證這些資料?我知道資料庫模式不僅是為了做到這一點,而且在前端做一次這些事情,在后端做兩次會導致太多的重復,并且可能有點難以維護。
這里有幾行代碼只是為了說明這個案例。不要評判我,我還在學習。
import mongoose from "mongoose";
const TaskSchema = new mongoose.Schema({
name: {
type: String,
required: true,
trim: true,
maxlength: 20,
},
description: {
type: String,
required: false,
},
completed: {
type: Boolean,
default: false,
},
date: {
type: Date,
default: Date.now,
},
});
export default mongoose.model("Task", TaskSchema);
import taskModel from "../models/tasksModel";
export function createTask(req: express.Request, res: express.Response) {
taskModel
.create(req.body)
.then((task) => res.status(201).send(task))
.catch((err) => res.status(400).send(err));
}
uj5u.com熱心網友回復:
問題是你既有基本的需求,也有業務的需求。這意味著通過宣告資料庫表(集合)、它的屬性、資料型別、約束等,您可以設定基本資料結構。但是您也可能有額外的業務需求,這可能不會被資料庫語法涵蓋。
例如,您將輸入作為物件陣列,然后應將其保存到資料庫中。可能您想防止傳遞重復的物件。
根據不同的條件(用戶角色、權限等),您的資料可以通過不同的驗證模式進行驗證。
此外,您驗證輸入并將其作為 DTO 傳輸到應用程式的各個層、模塊、組件也是一種常見情況。
最后但同樣重要的是,SQL 注入可以通過簡單的“消費”資料庫未經驗證的資料來進行。
uj5u.com熱心網友回復:
在前端,每??個用戶都使用他們自己的應用程式副本,該應用程式在一臺筆記本電腦上運行并接受來自本地系統或已知 Web 資源的輸入。
在后端,所有用戶都使用在共享基礎架構上運行并接受來自 Internet 的輸入的單個應用程式。
服務器端驗證是確保資料完整性和安全性所必需的,因為您無法控制 HTTP 請求的來源以及它們傳遞的有效負載。如果您的 api 是從腳本呼叫的,即使是合法客戶端也可能缺少客戶端驗證。無效或惡意請求會影響所有用戶。資料丟失可能無法恢復。
客戶端驗證是可選的,用于改進 UX 并針對無效輸入提供即時反饋 - 您可以節省 HTTP 往返時間,并且可以在整個表單完成并提交到服務器之前單獨驗證欄位。安全方面的客戶端應用程式僅影響當前用戶,并且始終可以通過重新加載網頁來恢復到初始狀態。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/411680.html
標籤:
上一篇:聚合匹配后確定與坐標的距離
下一篇:更新貓鼬中的資料
