2011-12-05 16 views
9

Sto cercando di trovare alcune buone pratiche per scrivere modelli MySQL usando node-mysql.Scrittura di modelli Node.js MySQL utilizzando node-mysql

Ecco quello che ho finora:

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; 

eventuali critiche o miglioramenti su questo sarebbe impressionante. Grazie!

+0

perché non utilizzare l'identificatore di oggetto per il primo metodo –

+0

come il modo in cui si separano le cose con module.exports. Sono passati più di 2 anni, quindi oggi come lo si migliora? Per favore condividi con noi cok veramente interessato mi piace qualsiasi cosa che assomigli ad un orm –

+0

Per esempio https://github.com/michalkow/node-mysql-model –

risposta

0

Il tuo modo di guardare bene.

Assicurarsi che quando si ottiene un errore il ritorno:

if (err) { 
return callback(err) 
} 

o semplicemente utilizzare il resto come si sta facendo.

Solo per il gusto della critica, qui è quello che faccio:

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; 

Io lo chiamo così

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

La mia preferenza personale è di non utilizzare le istanze per i miei modelli. Ho scoperto che cominciò a diventare disordinato quando avevo relazioni.

Ad esempio, supponiamo di avere un blog con post memorizzati in una tabella separata correlata all'utente. Si è tentati di fare in modo che l'oggetto User abbia una serie di post. Ora se si modifica questo array di post, è necessario ricordare di salvare l'utente modificato nel database. Continuavo a dimenticare, così ho solo smesso di usare le istanze.

+0

"create" è una proprietà Object javascript e la stai sovraccaricando:). Comunque mi piace il modello. –

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); 
Problemi correlati