function User(user, mysqlConnection) {
this.id = user.id;
this.name = user.name;
this.phone = user.phone;
this.password = user.password;
this.resumeId = user.resumeId;
this.db = mysqlConnection;
}
module.exports = User;
// 存储用户信息
User.prototype.save = function(callback) {
var that = this;
var user = {
name: this.name,
phone: this.phone,
password: this.password
};
// 简历外键
if (this.resumeId) user.resumeId = this.resumeId;
// 检查是否注册过
User.get(this.phone, this.db, function(err, result) {
if (err) {
callback(err);
} else {
if (result.length) {
// 已经注册过
callback(null, false);
} else {
// 没有注册过 写入数据库
var query = that.db.query('insert into user set ?', user, function(err, result) {
if (err) {
callback(err);
} else {
callback(null, result.insertId);
}
});
}
}
});
};
// 获取用户信息
User.get = function(phone, mysqlConnection, callback) {
var query = mysqlConnection.query('select * from user where phone = ?', phone, function(err, result){
if(err) callback(err);
callback(null, result);
});
};
上面是基于原型的对于用户信息的存储、查重的写法,因为牵涉到数据库的操作,用回调的方式来写不是很清晰,所以准备换成Promise的方式来组织代码,主要的问题在于需要实现这样的逻辑:
先判断用户是否存在
在进行插入数据库的新建用户的操作
回到主路由实现页面的渲染
下面这种写法有误,对于Promise的理解还是不到位,请指教。
function Manager(manager, mysqlConnection) {
this.id = manager.id;
this.name = manager.name;
this.phone = manager.phone;
this.password = manager.password;
this.companyId = manager.companyId;
this.db = mysqlConnection;
}
var Q = require('q');
module.exports = Manager;
Manager.prototype.save = function() {
var that = this;
return Q.promise(function(resolve, reject) {
Manager.get(that.phone, that.db).then(function(data) {
if (data.length) {
// 该手机号已经注册过了
resolve(false);
} else {
var manager = {
name: that.name,
phone: that.phone,
password: that.password
};
// 简历外键
if (that.companyId) manager.companyId = that.companyId;
// 没有注册过 写入数据库
var query = that.db.query('insert into manager set ?', manager, function(err, result) {
if (err) {
reject(err);
} else {
resolve(result.insertId);
}
});
}
});
});
};
Manager.get = function(phone, mysqlConnection) {
return Q.promise(function(resolve, reject) {
mysqlConnection.query('select * from manager where phone = ?', phone, function(err, result) {
if (err) {
reject(err);
} else {
resolve(result[0]);
}
});
});
}
// in main route.js
var Manager = require('manager.js');
var manager = new Manager({...});
manager.save().then(function(resolve, reject){xxx});