使用Node MySQL编写MySQL Node.js模型
我试图找到一些使用使用Node MySQL编写MySQL Node.js模型,mysql,node.js,models,Mysql,Node.js,Models,我试图找到一些使用node-MySQL编写MySQL模型的好方法 以下是我目前掌握的情况: var client=app.settings.client;//客户端已在Express设置中设置 var表='用户'; var User=function(){ } //使用来自Facebook的数据创建用户 User.prototype.createFromFacebook=函数(姓名、名、姓、电子邮件、位置、性别、facebookId、facebookToken、回调){ client.query
node-MySQL
编写MySQL模型的好方法
以下是我目前掌握的情况:
var client=app.settings.client;//客户端已在Express设置中设置
var表='用户';
var User=function(){
}
//使用来自Facebook的数据创建用户
User.prototype.createFromFacebook=函数(姓名、名、姓、电子邮件、位置、性别、facebookId、facebookToken、回调){
client.query(
'插入到'+表中+
'集名=?,名=?,姓=?,电子邮件=?,位置=?,'+
“性别=?,facebook\u id=?,facebook\u令牌=?”,
[姓名、名、姓、电子邮件、位置、性别、facebookId、facebookToken],
函数selectCb(错误、结果、字段){
如果(错误){
回调(err);
}否则{
回调(空,结果);
}
}
);
}
//仅使用用户的电子邮件地址获取用户
User.prototype.getByEmail=函数(电子邮件、回调){
client.query(
'从'+表格中选择*+
'其中电子邮件=?',
[电邮],
函数selectCb(错误、结果、字段){
如果(错误){
回调(err);
}否则{
回调(空,结果);
}
}
);
}
module.exports=用户;
对这方面的任何批评或改进都将是令人敬畏的。谢谢 你的方式看起来不错。 确保在收到错误时返回:
if (err) {
return callback(err)
}
或者像你现在这样使用else
为了便于评论,我做了以下几点:
var db = require(__dirname + '/myDatabaseInstance.js');
var create = function (vals, next) {
db.query('Insert INTO users SET ?', vals, next);
};
var load = function (selector, next) {
db.query('SELECT * FROM users WHERE ?', selector, function (err, vals) {
if(err) {
return next(err);
}
//at this point you could return a user object
//next(new User(vals[0]));
//or just return the array.
next(null, vals);
});
};
module.exports = create;
module.exports = load;
我这样称呼它
var User = require(__dirname + '/user.js');
User.load({'id' : 1}, function (err, vals) {
if (err) throw err;
console.log(vals);
});
我个人的偏好是不为我的模型使用实例。当我有亲戚关系时,我发现事情开始变得一团糟
例如,假设您有一个博客,其中的帖子存储在与用户相关的单独表中。让用户对象拥有一个帖子数组是很诱人的。现在,如果更改此posts数组,则必须记住将更改的用户保存到数据库中。我总是忘记,所以我只是停止使用实例。作为改进,您可以重构代码
Create model name abc.js with following code:
var mysqlModel = require('mysql-model');
var MyAppModel = mysqlModel.createConnection({
host: 'localhost',
user: 'ghgh',
password: 'gfhgfh',
database: 'gfhgh',
});
movie = new MyAppModel({tableName: "users"});
Now use this as following :
var abc = require(__dirname+'/routes/abc')
movie.find('id','all', function(err, rows) {
//console.log(rows)
})
movie.query("SELECT * from users", function(err, rows) {
});
var value ={'name': "value3"};
movie.save(value);
{
"ID" : {
"field" : "id",
"type" : 'integer',
"validation_rules" : "onlyInteger"
},
"name" : {
"field" : "name",
"type" : "string",
"validation_rules": "usernameregex"
}
}
您可以在user.js代码中添加新功能。为什么不为第一种方法使用对象说明符,就像您用e module.exports分隔东西一样。已经两年多了,今天你如何改进它?请与我们分享我真的很感兴趣,因为我喜欢任何看起来像ORM的东西,因为实例“create”是一个javascript对象属性,您正在重载它:)。不管怎样,我喜欢这个图案。
{
"ID" : {
"field" : "id",
"type" : 'integer',
"validation_rules" : "onlyInteger"
},
"name" : {
"field" : "name",
"type" : "string",
"validation_rules": "usernameregex"
}
}
class _controller {
constructor(object, model_schema) {
this._object = object;
this._model_schema = model_schema;
}
setId(_id) {
this.id = _id;
}
validateRules(validation_rules) {
return new Promise((resolve, reject) => {
let error = {};
let validation = new Validator(this._object, validation_rules);
if (validation.fails()) {
error.type = "validation";
error.errors = validation.errors.errors;
reject(error);
} else {
resolve(true);
}
});
};
create() {
return new Promise((resolve, reject) => {
let response = {};
let error = {};
this.validation_rules=
UserSchema.getRules(this._model_schema).get_validation_rules;
this
.validateRules(this.validation_rules )
.then(validation_result => {
db.insert(this.table, this._object)
.then(result => {
response.status = 201;
resolve(response);
});
})
});
}
})
class user extends _controller {
constructor(object) {
super(object, "user_schema");
this.object = object;
}
}