我目前正在通過使用 Express 創建一個 REST API 來學習 MySQL。我選擇在服務器而不是資料庫上驗證資料。我的問題是,我應該在服務器上的哪個位置執行此操作?我應該驗證資料(例如用戶名的最小和最大長度)...
- ...在控制器檔案之前使用中間件?
- ...在控制器檔案中,在接收請求之后并將資料發送到模型檔案之前?(下面的示例檔案)
- ...查詢前的模型檔案?(下面的示例檔案)
- ...一些我沒有想到的完全其他的解決方案?
./controllers/authController.js
const register = async (req, res) => {
const { username, email, password } = req.body;
**// Validating input data here?**
// TODO hash password
const activationToken = generateActivationToken(48);
const newUser = await User.create(
{ username, email, password, activationToken },
(err, result) => {
console.log(err);
if (err)
return res.status(400).json({
msg: err.message || "Some error has occured. Please try again.",
});
else res.json({ result });
}
);
};
./models/User.js
var db = require("../dbconnection");
// constructor for User object
const User = function (user) {
this.username = user.username;
this.email = user.email;
this.password = user.password;
this.activationToken = user.activationToken;
};
User.create = (newUser, result) => {
**// Validating input data here?**
db.query("INSERT INTO users SET ?", newUser, (err, res) => {
if (err) return result(err, null);
console.log("Created user.");
result(null, { id: res.insertId });
});
};
module.exports = User;
這樣做的通常/最佳實踐方式是什么?如果沒有最佳實踐,你怎么做?(我當然也在前端驗證資料。)你知道我可以看看任何好的示例專案嗎?
感謝您的時間!
uj5u.com熱心網友回復:
在 OOP 中有一個原則叫做:
《資訊專家原則》
根據這個原則,我們應該在包含最多資訊的物件中分配職責/方法來完成任務(它有助于我們創建內聚的類)。
因此,您可能應該將驗證邏輯放在 User 模型中。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/433455.html
上一篇:我怎樣才能創建有條件的外鍵?
