使用 sequelize 连接到 MySQL 数据源,在 Node.js 社区中,sequelize 是一个广泛使用的 ORM 框架,提供了很多丰富的接口。
1,安装对应的插件egg-sequelize :
npm install --save egg-sequelize mysql2
2,开启插件:
// config/plugin.js
module.exports = {
mysql:{
enable: true,
package: 'egg-mysql',
}
};
3,配置config
// config/config.default.js
module.exports = (appInfo) => {
return {
sequelize: {
dialect: 'mysql', //数据库
host: '127.0.0.1',
port: 3306,
password: '123456',
database: 'db_myapp', //数据库
timezone: '+08:00', // 保存为本地时区
define: {
underscored: true, //是否自动进行下划线转换
freezeTableName: true, // 禁止修改表名,默认情况下,sequelize将自动将所有传递的模型名称(define的第一个参数)转换为复数
},
},
}
4,在配置model
//app/mode/user.js
'use strict';
module.exports = (app) => {
const { STRING, ENUM, INTEGER, DATE, NOW } = app.Sequelize;
const User = app.model.define( //定义表结构
'user',
{
id: { type: INTEGER, primaryKey: true, autoIncrement: true },
username: STRING(20),
password: STRING(20),
createTime: {
type: DATE,
filed: 'create_time',
defaultValue: NOW,
},
updateTime: {
type: DATE,
filed: 'update_time', //可以重写某个字段的字段名,对应数据库字段名
defaultValue: NOW,
},
type: {
type: ENUM,
values: ['other', 'app', 'web', 'admin'],
defaultValue: 'web',
},
},
{
timestamps: true, //是否启用时间戳
createdAt: 'create_time', //对应数据库字段名,默认为createdAt
updatedAt: 'update_time',
}
);
return User;
};
在service层调用mode进行查询
//app/service/user.js
const Service = require('egg').Service;
class UserService extends Service {
/**
* 根据所传参数查询用户是否存在
* @param {*} param
*/
findUser(param) {
return this.ctx.model.User.findOne({
where: {
...param,
},
});
}
}
module.exports = UserService;