我正在尝试使用 express 和 node-mysql 将 mysql 数据库中的一些旧数据导出为 JSON。下面的 SQL 工作正常。我正在努力寻找一种简单的方法来加入 getOwnerID 的“结果”以及 compVouchers 中返回的每一行的数据。
我也在使用 async.js 跟随另一个线程,但我不确定这是否有帮助。但是,如果我能侥幸不使用它,那可能会更好。
//join some tables to get comprehensive voucher data
exports.compVouchers = function(req, res) {
var advertType = '"discount_voucher_all_CANCELLED"';
if (connection) {
connection.query('SELECT V.id AS voucher_id, V.title, V.description, V.discount, V.customers_total, V.advert_type, ' +
'V.customers_redeemed, V.start_date, V.expiry_date, V.redemption_code, ' +
'K.image, G.latitude, G.longitude FROM '+dbname+'.vouchers AS V ' +
'LEFT JOIN '+dbname+'.iag_key_tags AS K ON ( V.id = K.id ) ' +
'LEFT JOIN '+dbname+'.iag_geo_tags AS G ON ( V.id = G.id ) ' +
'WHERE V.advert_type like '+advertType , function(err, rows, fields) {
if (err) throw err;
console.log("Got "+rows.length+" Vouchers:");
// now get each vouchers owner id
async.map(rows, getOwnerID, function(err, results){
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end(JSON.stringify(results));
res.end();
});
});
}
};
function getOwnerID(voucher, callback) {
connection.query('SELECT parent_tagid AS owner_id FROM '+dbname+'.iag_key_tag_relationships WHERE TYPE =2 AND tagid = '+ voucher.voucher_id, function(err, info) {
if(err) {
console.log(err);
return callback(err);
}
else {
return callback(null, info);
}
});
}
所以
res.end(JSON.stringify(results)); // 仅打印每张凭证的所有 owner_id
res.end(JSON.stringify(rows)); // 打印每张凭证的数据,但不打印 owner_id
将 node-mysql 结果行组合成 node.js的单个 JSON 返回并不能解决问题,但如您所见,我已尝试遵循该线程中的建议。