工作流
项目中需要使用MySQL数据库时需要添加连接MySQL数据库的逻辑文件和代码段调用数据库。需要注意的是MySQL需要一定程度的人工维护、实时的调整索引等达到最优的使用效果。仅通过代码段调用写入或查询数据的话,数据增多时可能会导致查询时间越来越长。如果对方由数据库运维则无需担心这点。请了解这些问题后再使用以下方法。
使用流程:
1. 请网管创建测试用数据库
1. 添加链接数据库用的业务功能
2. 视口中添加调用链接方法的接口
1.具体操作由网管完成,需要向网管咨询获取以下配置信息
{
"host":"数据库IP",
"database":"数据库名称",
"username":"数据库用户名",
"password":"数据库密码",
"port":"数据库端口号"
}
sudo apt install mysql-workbench
1. wide中“ 业务功能列表”中新建事件类型的业务功能
如:创建 connectsql/main.js

2.编辑文件,添加新事件处理
如:新建 connect0mysql

3.自定义初始化,调用事件“ connect0mysql”。放开 customInit的注释代码添加调用

4.编辑事件,添加模板。编辑事件“ connect0mysql”,代码段管理中选择右上的 应用模板,选择 其他事件中的 链接mysql数据库


5.编辑代码,添加配置信息
代码段中手动添加tmp_data的声明,搜索“ 设置文档”,修改为从网管处获取的配置信息。

6.添加MySQL的表定义信息
注意:

1.查询
构造查询条件,构造方法参见文档: 查询条件
查找表“userinfo”中满足条件的数据
/*INSBEGIN:CUSTOM*/
function() {
return when.promise(function(resolve, reject) {
var setinter = setInterval(function() {
if (global.sequelizeSQLCache) {
clearInterval(setinter);
resolve(global.sequelizeSQLCache);
}
}, 20);
});
},
function(squeInst) {
var Sequelize = require('sequelize');
var tableName = "userinfo"; // 需要查询的mysql表名
var incomeTable = squeInst.models[tableName];
if (_.isEmpty(incomeTable)) {
var Err = new LogicError();
Err.errorCode = -38;
Err.message.message.tips = "获取MySQL数据库信息失败!!!";
throw Err;
}
var Op = Sequelize.Op;
//查询条件文档 https://github.com/sequelize/sequelize/blob/v4/docs/querying.md#operators
// 更改查询条件,例子中的username为表中字段,需要更改这个字段
var q = {
"where": {
"username": {
[Op.like]: '%%'
}
},
"limit": 10 || 10,
"offset": 0 || 0
};
return incomeTable.findAndCountAll(q)
.catch(function(err) {
console.log("Error ", err);
var Err = new LogicError();
Err.errorCode = -38;
Err.message.message.tips = "获取MySQL数据库信息失败!!!";
throw Err;
});
},
function(modInsts) {
tmp_data.total = modInsts.count;
var ret = [];
_.each(modInsts.rows, function(v, k) {
var whiteList = {};
_.extend(whiteList,v.dataValues);
ret.push(whiteList);
});
return ret;
},
/*INSEND:CUSTOM*/
2.更新
更新指定字段信息或创建一条信息,这里的创建可以修改修改为判断uid值是否存在来执行,则会少做一次查询,如果不清楚则不要更改
/*INSBEGIN:CUSTOM*/
function() {
return when.promise(function(resolve,reject){
var setinter = setInterval(function(){
if(global.sequelizeSQLCache){
clearInterval(setinter);
resolve(global.sequelizeSQLCache);
}
},20);
});
},
function(seqsql){
var uid="2";//这里修改为字段ID
var tableName = "user";//这里修改为需要使用mysql表名
var sqlData = {"first_name":"newname","lastName":"newlastname"} // 这里为需要更新或新建的数据
var incomeTable = seqsql.models[tableName];
incomeTable.findByPk(uid).then(function(data){
if(data){
data.update(sqlData);
}else{
incomeTable.create(sqlData);
}
}).catch(function(err){
console.log("Err ",err);
var Err = new LogicError();
Err.errorCode = -38;
Err.message.message.tips = "数据库更新失败!!!";
throw Err;
});
},
/*INSEND:CUSTOM*/
3.删除
查找数据库中“user”表中字段“status”为“inactive”的所有字段,对查找到的字段执行删除动作
/*INSBEGIN:CUSTOM*/
function() {
return when.promise(function(resolve,reject){
var setinter = setInterval(function(){
if(global.sequelizeSQLCache){
clearInterval(setinter);
resolve(global.sequelizeSQLCache);
}
},20);
});
},
function(seqsql){
var tableName = "user";//这里修改为需要使用mysql表名
var incomeTable = seqsql.models[tableName];
incomeTable.destroy({
where: {
status: 'inactive'
}
}).catch(function(err){
console.log("Err ",err);
var Err = new LogicError();
Err.errorCode = -38;
Err.message.message.tips = "数据库更新失败!!!";
throw Err;
});
},
/*INSEND:CUSTOM*/
满足条件id为1或条件id为2的字段执行更新,条件请参照: 查询条件自行构建
/*INSBEGIN:CUSTOM*/
function() {
return when.promise(function(resolve,reject){
var setinter = setInterval(function(){
if(global.sequelizeSQLCache){
clearInterval(setinter);
resolve(global.sequelizeSQLCache);
}
},20);
});
},
function(seqsql){
var tableName = "user";//这里修改为需要使用mysql表名
var incomeTable = seqsql.models[tableName];
var Op = Sequelize.Op;
return incomeTable.update({rank:1.8},{where:{
[Op.or]:[{id:1},{id:2}]
}})
.spread(function(affectedCount, affectedRows){
console.log("affectedCount & affectedRows",affectedCount,affectedRows);
}).catch(function(err){
console.log("Err ",err);
var Err = new LogicError();
Err.errorCode = -38;
Err.message.message.tips = "数据库更新失败!!!";
throw Err;
});
},
/*INSEND:CUSTOM*/