Написание моделей MySQL Node.js с использованием node-mysql - PullRequest
10 голосов
/ 05 декабря 2011

Я пытаюсь найти несколько хороших практик для написания моделей 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;

Любые критические замечания или улучшения могутбудь офигенным.Спасибо!

Ответы [ 2 ]

0 голосов
/ 19 мая 2017
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);
0 голосов
/ 21 декабря 2012

Ваш путь выглядит отлично.

Убедитесь, что при появлении ошибки вы вернетесь:

if (err) {
return callback(err)
}

или просто используйте другое, как вы делаете.

Просто ради критики вот что я делаю:

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);
});

Мое личное предпочтение - не использоватьэкземпляры для моих моделей.Я обнаружил, что это стало грязно, когда у меня были отношения.

Например, скажем, у вас есть блог с сообщениями, которые хранятся в отдельной таблице, связанной с пользователем.Соблазнительно сделать объект User массивом постов.Теперь, если вы измените этот массив сообщений, вы должны помнить, чтобы сохранить измененного пользователя в базе данных.Я продолжал забывать, поэтому я просто перестал использовать экземпляры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...