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

关于项目结构:

nodejs使用sequelize操作mysql实例_github

其中,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:https://github.com/caiya/node-sequelize