乐趣区

关于node.js:nodejs数据库orm扩展sequelize

sequelize是 nodejs 版的 orm 库,用过 laravelORM 的能很快能上手

具体文档

  • 官网
  • github

简略代码 demo

const {Sequelize, DataTypes, Model, QueryTypes, Op} = require("sequelize");
const sequelize = new Sequelize("sqlite://sql.db", { logging: false});

class User extends Model {}
class Address extends Model {}

User.init(
  {
    // 在这里定义模型属性
    id: {
      type: DataTypes.INTEGER,
      primaryKey: true,
      autoIncrement: true,
    },
    name: {
      type: DataTypes.STRING,
      unique: true,
      // allowNull 默认为 true
      validate: {async isUnique(name) {const res = await User.findOne({where: {name}})
          if (res) throw new Error('用户名已存在')
        },
        // len: [1,2]
      }
    },
  },
  {
    // 这是其余模型参数
    sequelize, // 咱们须要传递连贯实例
    // modelName: "User", // 咱们须要抉择模型名称
    tableName:'users' // 表名,默认为模型名的复数单词
  }
);

Address.init(
  {
    id: {
      type: DataTypes.INTEGER,
      primaryKey: true,
      autoIncrement: true,
    },
    name: {
      type: DataTypes.STRING,
      unique: true,
      // allowNull 默认为 true
    },
  },
  {
    sequelize,
    modelName: "Address",
  }
);

// 模型关系 多对多
User.belongsToMany(Address, { through: "userAddress", as:'addres'}); // through 代表两头表的名字,as 是查问别名
Address.belongsToMany(User, { through: "userAddress"});

(async () => {
  try {// await sequelize.sync({ alter: true});  // 同步模型到数据库 - 创立表
    // const user = await User.findOne({where: { name: {[Op.like]:'% 小 %'} } }); // 根本查问
    const [user] = await User.findOrCreate({where:{name:'小小'},include:'addres'}); // 顺带查问到关联模型的数据
    
    const [address] = await Address.findOrCreate({where:{name:'小小 de 地址'}});
    await user.addAddress(address); // 关联减少

    console.log(user.toJSON());
  } catch (e) {console.log(e);
  }
})();
退出移动版