11.3 Notes

10.28-11.3 Learning Notes

Sequelize

将renter项目中的sql全部改成sequelize
以下是我的代码重构历程:

在原代码基础上稍作改动

如何进行代码测试?

session如何连接

由于不会连接session,所以我在另一个较简单的express框架下测试,可以直接用post/get等方法测试

使用sequelize默认命名风格还是遵循原代码命名风格?

还是用原代码的吧,否则要改的东西更多

介绍sequelize的默认命名风格

model是单数
table是复数
e.g user是模型名称,users是表名称
默认主键是id
默认添加两个元素:createdAt和updatedAt 保存了时间信息

如何在sequelize自定义模型

在网上找了很久,相关的资料比较少,按照官方文档去写,不知道为什么运行出错,有待进一步研究
https://github.com/demopark/sequelize-docs-Zh-CN/blob/master/legacy.md
最后通过define方法解决,还没弄清为什么用init不行
https://sequelize.readthedocs.io/en/v3/docs/legacy/

module.exports = (sequelize, DataTypes) => {
    const user = sequelize.define('user', {
        UserID: {
            type: DataTypes.UUID,
            primaryKey: true,
            autoIncrement: true 
        },
        Gender: DataTypes.STRING,
        Avatar: DataTypes.STRING,
        Openid: DataTypes.STRING,
        Email: DataTypes.STRING,
        Name: DataTypes.STRING,
        FirstLogin: DataTypes.INTEGER,
        DefaultAddress: DataTypes.INTEGER,
    }, {
        tableName: 'user',
    });

如何关闭时间戳

createdAt和updatedAt
两种方法:
1.在模型文件里面添加,只对单个模型生效

var userDetails = sequelize.define('userDetails', {
    userId :Sequelize.INTEGER,
    firstName : Sequelize.STRING,
    lastName : Sequelize.STRING,
    birthday : Sequelize.DATE
}, {
    timestamps: false
});

2.在建立连接的时候添加,对所有模型生效

//使用config.json时的写法
//在config.json里面添加
"define": {
            "timestamps": false
        }

//不使用config.json时的写法
var sequelize = new Sequelize('sequelize_test', 'root', null, {
    host: "127.0.0.1",
    dialect: 'mysql',
    define: {
        timestamps: false
    }
});

工作进度

建立自定义模型,适配原来的数据库
写了前两个接口
route.js里面还要很多接口要修改

// get user info
router.post('/getUserInfo', async function (req, res) {
    let UserID = req.body.UserID || '';
    console.log(UserID);
    try {
        let result = await models.user.findByPk(UserID);
        return res.json(result);
    }
    catch (err) {
        console.error(err);
        return res.json({ ret_code: 2, ret_msg: 'FAL' });
    }
})

//check // update user info
router.post('/updateUserInfo', async function (req, res) {
    let Name = req.body.Name || 0;
    let Gender = req.body.Gender || 0;
    let Email = req.body.Email || 0;
    let UserID = req.body.UserID || 0;
    let params = [Name, Gender, Email, UserID];
    try {
        let result = await models.user.findByPk(UserID);
        return result.update(req.body);
    }
    catch (err) {
        console.error(err);
        return res.json({ ret_code: 2, ret_msg: 'FAL' })
    }
})