sequelize数据库配置
安装并配置egg-sequelize插件
npm install --save egg-sequelize mysql2
配置插件plugin.js
'use strict';
/** @type Egg.EggPlugin */
module.exports = {
sequelize:{
enable: true,
package: 'egg-sequelize',
},
};
egg-sequelize 链接多个数据库 /config/config.default.js 配置
// config.default.js
config.sequelize = {
// 定义多个数据库使用
datasources: [
{
delegate: 'model', // 加载所有的模型到 app.model and ctx.model
baseDir: 'model', // 要加载的模型目录`app/model/*.js`
database: 'db',
dialect: 'mysql',
host: 'ip',
port: 'port',
username: 'root',
password: 'root',
// 中国时区
timezone: '+08:00',
define: {
// 取消数据表名复数
freezeTableName: true,
// 自动写入时间戳 created_at updated_at
timestamps: true,
// 字段生成软删除时间戳 deleted_at
// paranoid: true,
createdAt: 'created_time',
updatedAt: 'updated_time',
// deletedAt: 'deleted_time',
// 所有驼峰命名格式化
underscored: true
}
},
{
delegate: 'logModel', // 加载所有的模型到 app.logModel and ctx.logModel
baseDir: 'model_log', // 要加载的模型目录 `app/model_log/*.js`
database: 'db_log',
dialect: 'mysql',
host: 'ip',
port: 'port',
username: 'root',
password: 'root',
// 中国时区
timezone: '+08:00',
define: {
// 取消数据表名复数
freezeTableName: true,
// 自动写入时间戳 created_at updated_at
timestamps: true,
// 字段生成软删除时间戳 deleted_at
// paranoid: true,
createdAt: 'created_time',
updatedAt: 'updated_time',
// deletedAt: 'deleted_time',
// 所有驼峰命名格式化
underscored: true
}
},
]
};
注意:model层配置
model:app.model.define
// app/model/type.js
module.exports = app => {
const { STRING, INTEGER, DATE, ENUM, TEXT } = app.Sequelize;
const Type = app.model.define('type', {
id: {
type: INTEGER(20),
primaryKey: true,
autoIncrement: true,
unique: true
},
created_time:DATE,
updated_time: DATE,
});
return Type;
};
model_log:app.logModel.define
// app/model/type.js
module.exports = app => {
const { STRING, INTEGER, DATE, ENUM, TEXT } = app.Sequelize;
const Type = app.logModel.define('type', {
id: {
type: INTEGER(20),
primaryKey: true,
autoIncrement: true,
unique: true
},
created_time:DATE,
updated_time: DATE,
});
return Type;
};
调用
// db
this.ctx.model.modelName;
// db_log
this.ctx.logModel.modelName;
egg-oracle 链接多个数据库
客户端oracle下载链接Instant Client for Microsoft Windows (x64) 64-bit
根据本地或远程服务器下载的oracle版本 来下载客户端对应的版本
比如本地版本是:
下载对应的客户端就是:
instantclient-basiclite-windows.x64-12.1.0.2.0.zip
instantclient-sdk-windows.x64-12.1.0.2.0.zip
把这两个文件解压到:C:\oracle\instantclient_12_1 文件目录不同 ,不会相互覆盖
远程连接oracle数据库
配置环境变量:
path中新增2条:
C:\oracle\instantclient_12_1\vc12
C:\oracle\instantclient_12_1
使用egg-oracle插件配置
npm i egg-oracle --save
/config/plugin.js 配置
'use strict';
/** @type Egg.EggPlugin */
module.exports = {
oracle :{
enable: true,
package: 'egg-oracle',
}
};
/config/config.default.js 配置
config.oracle = {
clients: {
//await this.app.oracle.get('db1').getConnection(); 获取不同的数据库
db1:{
user: 'user', //用户名
password: 'password', //密码
//IP:数据库IP地址,PORT:数据库端口,SCHEMA:数据库名称
connectString: 'ip',
},
//await this.app.oracle.get('db2').getConnection(); 获取不同的数据库
db2:{
user: 'user', //用户名 mes_trace
password: 'password', //密码 Trace$9dec
//IP:数据库IP地址,PORT:数据库端口,SCHEMA:数据库名称
connectString: 'ip', //ip
},
},
};
调用
app/service/tool.js
'use strict';
const Service = require('egg').Service;
class ToolService extends Service {
//查询数据
async echo(e) {
const connection = await this.app.oracle.get('db1').getConnection();
const result = await connection.execute(e);
connection.close();
// console.log(result.rows[0]);
//封装返回为JSON格式
function resut(result){
let titleList = result.metaData;
let ddList = result.rows;
let allList = [];
for (let i = 0; i < ddList.length; i++) {
let itemList = ddList[i];
let ibj = {};
for (let j = 0; j < itemList.length; j++) {
//console.log(titleList[j].name +"-"+ itemList[j])
ibj[titleList[j].name] = itemList[j];
}
allList.push(ibj)
}
return allList
}
return resut(result)
}
//插入数据
async echoindex(e) {
let connection;
try {
connection = await this.app.oracle.get('db1').getConnection();
//插入数据库自增的序列号SEQ_ACCOUNT.nextval
let res= await connection.execute(e)
//提交事务
await connection.commit();
//释放连接
connection.close();
if(res.rowsAffected && res.rowsAffected>0){
return 1
}else{
return 0
}
} catch (err) {
console.error(err);
//异常:则进行事务回滚
if(connection!=undefined && connection!=null){
await connection.rollback();
await connection.close();
}
//执行回调:传入异常信息
return err
}
}
}
module.exports = ToolService;
获取客户端IP地址
1.配置egg.js
路径 config/config.default.js
// 注意,开启此模式后,应用就默认自己处于反向代理之后,
// 会支持通过解析约定的请求头来获取用户真实的 IP,协议和域名。
// 如果你的服务未部署在反向代理之后,请不要开启此配置,以防被恶意用户伪造请求 IP 等信息。
config.proxy = true;
2. 配置nginx
#访问Tomcat API 请求服务器的代理api
location /api/ {
root html;
index index.html index.htm;
# 获取ip地址 前3个开启
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Real-Port $remote_port;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://10.122.122.122:7001/;
}
3. 获取ip
//菜单列表
async menulist(){
const { ctx, app } = this;
const new_ip = ctx.request.ip; // 获取ip
console.log(new_ip,'-----ip--------')
}