使用node-mysql编写MySQL Node.js模型

Jos*_*ith 10 mysql models node.js

我正在尝试使用编写MySQL模型的一些好方法node-mysql.

这是我到目前为止所拥有的:

var client = app.settings.client; // Client is set in Express settings

var table = 'users';

var User = function() {

}

// Create the user with data from Facebook
User.prototype.createFromFacebook = function (name, first_name, last_name, email, location, gender, facebookId, facebookToken, callback) {
  client.query(
    'INSERT INTO ' + table +
    ' SET name = ?, first_name = ?, last_name = ?, email = ?, location = ?,' +
    ' gender = ?, facebook_id = ?, facebook_token = ?',
    [ name, first_name, last_name, email, location, gender, facebookId, facebookToken ],
    function selectCb(err, results, fields) {
      if(err) {
        callback(err);
      } else {
        callback(null, results);
      }
    }
  );
}

// Get user with just their email address
User.prototype.getByEmail = function (email, callback) {
  client.query(
    'SELECT * FROM ' + table +
    ' WHERE email = ?',
    [ email ],
    function selectCb(err, results, fields) {
      if(err) {
        callback(err);
      } else {
        callback(null, results);
      }
    }
  );
}
module.exports = User;
Run Code Online (Sandbox Code Playgroud)

对此的任何批评或改进都会很棒.谢谢!

lee*_*way 0

你的方式看起来不错。

确保当您收到错误时返回:

if (err) {
return callback(err)
}
Run Code Online (Sandbox Code Playgroud)

或者像你一样使用 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;
Run Code Online (Sandbox Code Playgroud)

我这样称呼它

var User = require(__dirname + '/user.js');
User.load({'id' : 1}, function (err, vals) {
  if (err) throw err;
  console.log(vals);
});
Run Code Online (Sandbox Code Playgroud)

我个人的偏好是不为我的模型使用实例。当我有了关系时,我发现事情开始变得混乱。

例如,假设您有一个博客,其中的帖子存储在与用户相关的单独表中。让 User 对象拥有一系列帖子是很诱人的。现在,如果您更改此 posts 数组,则必须记住将更改后的 User 保存到数据库中。我一直忘记,所以我就不再使用实例了。