nodejs使用sequelize操作mysql实例

sequelize是node操作mysql的一款npm包,包含很多特性:数据库模型映射、事务处理、模型属性校验、关联映射等,花了两天时间学习了下基本的一些操作,特别是关联映射部分的操作,包含1:1、1:N、N:N部分,利用express框架实现简单的rest服务。

关于项目结构:

其中,routes存放各种路由,models配置各种数据库模型类,ref.js用来配置相关的数据模型关联关系,主要关系为:user和loginInfo是1:1、user和address是1:N、user和role是N:N关系,index.js主要是加载路由:

1

2

3

4

5

6

module.exports = function(app) {

    app.use("/api/users", require("./user.js"));

    app.use("/api/addresses", require("./address.js"));

    app.use("/api/loginInfos", require("./loginInfo.js"));

    app.use("/api/roles", require("./role.js"));

};

ref.js映射关系配置类:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

/**

 * 模型关联类

 */

var { sequelize } = require("../config/db");

var User = sequelize.import("./user");

var LoginInfo = sequelize.import("./loginInfo");

var Address = sequelize.import("./address");

var Role = sequelize.import("./role");

//建立模型之间关联关系

User.hasOne(LoginInfo);

LoginInfo.belongsTo(User);

User.hasMany(Address, {

    foreignKey: 'user_id',

    targetKey: 'id',

    as: "Addresses" //别名,目标模型会混入到源模型后会使用该名称,存在getAddresses、setAddresses等方法

});

Address.belongsTo(User); //address想反查user必须加这个,否则只能实现user查询address

User.belongsToMany(Role, {

    through: "userRoles"

});

Role.belongsToMany(User, {

    through: 'userRoles'

});

//创建表

sequelize.sync({ force: false });

数据库配置类:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

const Sequelize = require('sequelize');

const sequelize = new Sequelize('node-sequelize''admin''admin', {

    host: 'localhost',

    dialect: 'mysql',

    pool: {

        max: 5,

        min: 0,

        idle: 10000

    }

});

//测试数据库链接

sequelize.authenticate().then(function() {

    console.log("数据库连接成功");

}).catch(function(err) {

    //数据库连接失败时打印输出

    console.error(err);

    throw err;

});

exports.sequelize = sequelize;

exports.Sequelize = Sequelize;

当然,app.js要做的就是加载路由、加载映射关系配置文件,使数据模型和数据库同步:

1

2

3

4

//加载主外键关系及创建数据库

require('./models/ref');

Router(app);

详细代码已上传至github:GitHub - caiya/node-sequelize: nodejs使用sequelize的api测试应用

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值