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' })
}
})