2011-12-05 8 views
9

node-mysqlを使用してMySQLモデルを作成するための良いプラクティスを見つけようとしています。この上node-mysqlを使用したMySQL Node.jsモデルの作成

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; 

どれ批判や改善が素晴らしいだろう:

は、ここで私がこれまで持っているものです。ありがとう!

+0

なぜ、第1のメソッド –

+0

のオブジェクト指定子は、module.exportsとは別の方法で使用しないでください。今日は2年以上経っています。 ormのようなものが好きな私に本当に興味のあるコックを教えてください –

+0

例えばhttps://github.com/michalkow/node-mysql-model –

答えて

0

あなたの方法は上手く見えます。

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オブジェクトに投稿の配列を持たせることが魅力的です。この投稿配列を変更すると、変更されたユーザをデータベースに保存することを忘れないでください。私は忘れていたので、インスタンスの使用をやめました。

+0

"create"はjavascript Objectのプロパティです。あなたはそれをオーバーロードしています: )。私はとにかくパターンが好きです。 –

0
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); 
関連する問題