使用 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"

根据这个原则,我们应该在包含最多信息的对象内部分配职责/方法来完成任务 (它帮助我们创造凝聚力 类)。

因此,您可能应该将验证逻辑放在用户模型中