创建数据库
创建两个数据库分别是dati-default和dati-default1
安装egg-sequelize插件和msyql2模块
npm install --save egg-sequelize mysql2
config/plugin.js中进行sequelize配置
'use strict';
module.exports = {
sequelize: {
enable: true,
package: 'egg-sequelize',
},
};
配置config/config.default.js
/* eslint valid-jsdoc: "off" */
'use strict';
/**
* @param {Egg.EggAppInfo} appInfo app info
*/
module.exports = appInfo => {
/**
* built-in config
* @type {Egg.EggAppConfig}
**/
const config = exports = {};
// sequelize数据库配置信息————————单数据源配置
// config.sequelize = {
// dialect: 'mysql',
// host: '127.0.0.1',
// port: '3306',
// database: 'dati-default',
// user: 'root',
// password: 'root',
// };
config.sequelize = {
datasources: [
{
delegate: 'model', // 加载所有的模型到 app.model and ctx.model
baseDir: 'model', // 要加载的模型目录`app/model/*.js`
database: 'dati-default',
dialect: 'mysql',
host: '127.0.0.1',
port: '3306',
username: 'root',
password: 'root',
timezone: 'Asia/Shanghai', // 时间差
benchmark: true,
define: {
freezeTableName: true, // 禁止数据读写时给表赋别名(as)
underscored: true,
timestamps: false, // 为模型添加createdAt和updatedAt字段
},
},
{
delegate: 'models', // 加载所有的模型到 app.logModel and ctx.logModel
baseDir: 'models', // 要加载的模型目录 `app/model_log/*.js`
database: 'dati-defualt1',
dialect: 'mysql',
host: '127.0.0.1',
port: '3306',
username: 'root',
password: 'root',
timezone: 'Asia/Shanghai',
benchmark: true,
define: {
freezeTableName: true, // 禁止数据读写时给表赋别名(as)
underscored: true,
timestamps: false, // 为模型添加createdAt和updatedAt字段
},
},
],
};
return {
...config,
};
};
创建user表和app/model/user.js和app/models/user.js
测试,两个数据库中分别创建两张表,都叫做user
'use strict'; // app/model/user.js
module.exports = app => {
const { STRING, INTEGER } = app.Sequelize; // 获取 sequelize对应的数据类型映射
// 1.3 https://itbilu.com/nodejs/npm/V1PExztfb.html 中有更详细的数据类型
const User = app.model.define('user', {
id: {
type: INTEGER,
primaryKey: true, // 主键
},
name: STRING,
}, {
// freezeTableName默认值是 false 如果是false的话,会自动在表名后加s复数
freezeTableName: true,
// timestamps默认值是true,如实是true会自动添加上 create_time 和update_time两个字段
timestamps: false,
});
return User;
};
'use strict'; // app/models/user.js
module.exports = app => {
const { STRING, INTEGER } = app.Sequelize; // 获取 sequelize对应的数据类型映射
// 1.3 https://itbilu.com/nodejs/npm/V1PExztfb.html 中有更详细的数据类型
const User = app.models.define('user', {
id: {
type: INTEGER,
primaryKey: true, // 主键
},
name: STRING,
}, {
// freezeTableName默认值是 false 如果是false的话,会自动在表名后加s复数
freezeTableName: true,
// timestamps默认值是true,如实是true会自动添加上 create_time 和update_time两个字段
timestamps: false,
});
return User;
};
注:在进行app.model.define()的时候,其中的model必须和配置中的baseDir一致
service服务的书写 app/service/user.js
'use strict';
const Service = require('egg').Service;
function toInt(str) {
if (typeof str === 'number') return str;
if (!str) return str;
return parseInt(str, 10) || 0;
}
class UserService extends Service {
async index1() {
const ctx = this.ctx;
const query = { limit: toInt(ctx.query.limit), offset: toInt(ctx.query.offset) };
// return await ctx.model.User.findAll(query); // 这个是第一个数据源的请求
return await ctx.models.User.findAll(query); // 这个是第二个数据源的请求
}
}
module.exports = UserService;