2011-12-05 25 views
9

Tôi đang cố gắng tìm một số phương pháp hay để viết các mô hình MySQL bằng cách sử dụng node-mysql.Viết các mô hình MySQL Node.js bằng cách sử dụng nút-mysql

Dưới đây là những gì tôi có cho đến nay:

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; 

Bất kỳ lời phê bình hoặc cải thiện về vấn đề này sẽ được awesome. Cảm ơn!

+0

lý do tại sao không nên sử dụng trình chỉ định đối tượng cho phương pháp thứ nhất –

+0

giống như cách bạn tách riêng mọi thứ với mô-đun .exports. Đã hơn 2 năm nên hôm nay bạn cải thiện nó như thế nào? Xin vui lòng chia sẻ với chúng tôi im thực sự quan tâm cok tôi thích bất cứ điều gì trông giống như một orm –

+0

Ví dụ https://github.com/michalkow/node-mysql-model –

Trả lời

0

Cách của bạn có vẻ ổn.

Hãy chắc chắn rằng khi bạn nhận được một lỗi trở lại của bạn:

if (err) { 
return callback(err) 
} 

hoặc chỉ cần sử dụng khác như bạn đang làm.

Chỉ vì lợi ích của phê bình, đây là những gì tôi làm:

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; 

tôi gọi nó theo cách này

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

sở thích cá nhân của tôi là không sử dụng trường hợp cho các mô hình của tôi. Tôi thấy nó bắt đầu lộn xộn khi tôi có quan hệ.

Ví dụ: giả sử bạn có một blog có bài đăng được lưu trữ trong một bảng riêng có liên quan đến Người dùng. Nó là hấp dẫn để làm cho đối tượng User có một mảng các bài viết. Bây giờ nếu bạn thay đổi mảng bài viết này, bạn phải nhớ lưu Người dùng đã thay đổi vào cơ sở dữ liệu. Tôi cứ quên đi, vì vậy tôi đã ngừng sử dụng các trường hợp.

+0

"tạo" là một tài sản đối tượng javascript và bạn đang quá tải nó:). Tôi thích mô hình này. –

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); 
Các vấn đề liên quan