使用 Express(和 MySQL)应该在哪里进行数据验证?
Where should data-validation happen using Express (and MySQL)?
我目前正在通过使用 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;
usual/best 这样做的练习方法是什么?如果没有最佳实践,您将如何做? (当然,我也在前端验证数据。)你知道我可以看看的任何好的示例项目吗?
感谢您的宝贵时间!
在 OOP 中有一个原则叫做:
"The information Expert principle"
根据这个原则,我们应该在包含最多信息的对象内部分配职责/方法来完成任务
(它帮助我们创造凝聚力 类)。
因此,您可能应该将验证逻辑放在用户模型中。
我目前正在通过使用 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;
usual/best 这样做的练习方法是什么?如果没有最佳实践,您将如何做? (当然,我也在前端验证数据。)你知道我可以看看的任何好的示例项目吗?
感谢您的宝贵时间!
在 OOP 中有一个原则叫做:
"The information Expert principle"
根据这个原则,我们应该在包含最多信息的对象内部分配职责/方法来完成任务 (它帮助我们创造凝聚力 类)。
因此,您可能应该将验证逻辑放在用户模型中。