Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Node MySQL编写MySQL Node.js模型_Mysql_Node.js_Models - Fatal编程技术网

使用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);
  • 数据库连接的数据源对象
  • 创建UserSchema模型user.js定义字段、数据类型、验证规则等
  • user.schema.js

    {
     "ID" : {
          "field" : "id",
           "type" : 'integer',
           "validation_rules" : "onlyInteger"     
      },
    "name" : {
          "field" : "name",
          "type" : "string",
          "validation_rules": "usernameregex"   
     }
    }
    
    
  • 创建Controller.js,其中可以使用findAll、findById、Create、update、delete和search API方法
  • 创建user.js,它使用用户模式扩展到common controller.js

  • 您可以在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;
            }
      }