我是一個在node.js + mysql +面向對象的新手。nodejs解析mysql行到對象
以下問題here我希望'Content'對象使用由mysql查詢返回的值。現在我在做什麼,我發現它真的是多餘的,可能是愚蠢的,因爲行[0]本身就是我想要使用的對象。任何更好的方式來做到這一點?或者如果這是不對的方法也值得讚賞。
(我使用的是二進制UUID鍵必須是十六進制stringifyed再次爲資源響應發送)
content.js:
function Content() {
this.id = '';
this.name = '';
this.domain = '';
}
Content.prototype.validate = function(path, queryParams) {
...
return true;
};
Content.prototype.whatever = function(apiVersion, params, callback) {
...
return callback(null, newParams);
};
mysql.js:
MySQLDb.SELECT_CONTENT_ID = "SELECT id, name, domain FROM content WHERE id = UNHEX(?)";
MySQLDb.prototype.findContentByID = function(id, callback) {
this.dbConnection.query(MySQLDb.SELECT_CONTENT_ID, [ id ],
function(err, rows, fields) {
var content = new Content();
if (rows.length > 0) {
var i = 0;
for (var key in rows[0]) {
if (rows[0].hasOwnProperty(key) && content.hasOwnProperty(key)) {
// BINARY(16) --> HEX string
if (fields[i].columnType === 254) {
content[key] = rows[0][key].toString('hex').toUpperCase();
} else {
content[key] = rows[0][key];
}
} else {
console.log('Column ' + key + ' out of sync on table "content"');
}
i += 1;
}
}
callback(err, content);
});
};
contentRes.js:
contentRes.GETWhatever = function(req, res) {
db.findContentByID(req.params.id, function onContent(err, content) {
if (err || !content.validate(req.path, req.query)) {
return res.send({});
}
content.whatever(req.query.apiVersion, req.query.d,
function onWhateverdone(err, params) {
if (err) {
return res.send({});
}
return res.send(params);
});
});
};
謝謝巴里。我仍然覺得這是多餘的,但這是我如何結束的。事實上,我在單例類中插入了mysql連接,其餘的類調用了mysql.query()(它調用dbConnection.query()) – Miquel
不客氣。這種方法(單例)確實擺脫了至少一些冗餘樣板。我非常同情試圖簡化/簡化數據庫處理代碼。 –