mysql - Express.js 和 MySQL 模型 + 验证

标签 mysql node.js validation express model

我正在使用 Node.js 和 Express 框架开发应用程序。我找到了很多使用 MongoDB 进行数据建模的示例,但我的项目需要 SQL 数据库。

有人可以简单解释一下,基于 MySQL 制作模型的最佳方法是什么?

我还想知道如何提供这些模型的后续验证。也许我应该在每个属性中定义验证属性?

最佳答案

没有最好的方法来基于 MySQL 制作模型。您可以实现自己的方式来处理模型,但是 Node.js 有许多可用的 ORM 模块,我建议使用其中之一。

我使用Sequelize作为 ORM 来定义模型并在多个 Express 应用程序中与数据库交互。我遇到的另一个 Node ORM 是 Bookshelf.js ,但还有很多其他的。使用哪一种取决于您的喜好和需求。

编辑:使用示例

我建议在使用 Sequelize 模型时采用以下结构:项目中名为 models 的目录,其中包含每个模型的文件和用于加载 Sequelize 环境的 index.js 文件。如果您使用Sequelize CLI ,它还有几个遵循此结构的方法。

index.js

const fs = require("fs");
const path = require("path");
const Sequelize = require("sequelize");
let sqize = new Sequelize({
  host     : "1.2.3.4",
  port     : 1234,
  database : "testDb",
  username : "pino",
  password : "th1S1s@c0mpL3xP4sSw0rD",
  dialect: 'mysql',
});

fs.readdirSync(__dirname).filter(function(file) {
  return (file.indexOf(".") !== 0) && (file !== "index.js");
}).forEach(function(file) {
  let model = sequelize.import(path.join(__dirname, file));
  db[model.name] = model;
});

Object.keys(db).forEach(function(modelName) {
  if ("associate" in db[modelName]) {
    db[modelName].associate(db);
  }
});

db.sequelize = sequelize;
db.Sequelize = Sequelize;
db.op        = Sequelize.Op;

module.exports = {
  sqize: sqize,
  Sequelize: Sequelize,
  op: Sequelize.Op
};

users.js

module.exports = function (sequelize, DataTypes) {
  let users = sequelize.define('users', {
    username: {
      type: DataTypes.STRING(255),
      allowNull: true
    },
    firstname: {
      type: DataTypes.STRING(255),
      allowNull: true
    },
    secondname: {
      type: DataTypes.STRING(255),
      allowNull: true
    },
    email: {
      type: DataTypes.STRING(255),
      allowNull: true
    },
    type: {
      type: DataTypes.INTEGER(4),
      allowNull: true,
      references: {
        model: 'users_type',
        key: 'id'
      }
    },
    password: {
      type: DataTypes.STRING(255),
      allowNull: true
    },
    salt: {
      type: DataTypes.STRING(255),
      allowNull: true
    }
  }, {
    tableName: 'users'
  });

  users.associate = function (models) {
    users.belongsTo(models.user_types, {
      foreignKey: "type",
      as: "userType"
    });
    users.hasMany(models.user_logs, {
      foreignKey: "user_id",
      as: "userLogs"
    });
  };

  return users;
};

有关更多参数和详细信息,您可以查看 Sequelize 文档,该文档非常简单并且充满示例和详细信息。

此外,我使用了一些 ECMAScript 6,因此如果您的 Node.js 版本不支持它们,请更改或转译此代码。

关于mysql - Express.js 和 MySQL 模型 + 验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48946275/

相关文章:

javascript - Node : Mocha TDD sending Array in body

php尊重验证只是验证如果不为空

mysql - 如何更新 MySQL 选择查询的结果

php - Mysql创建排序索引性能简单频繁查询

javascript - 在 Node.js 套接字中写入和 'data' 事件

javascript - envifying 客户端库有什么意义?

mysql - 如何将变量放入 mysql 查询中?

mysql - MySql not 运算符的令人惊讶的行为

ruby - 纠正无效 CSV 文件的工具

Javascript 检查输入是否为特定字符串