我是nodejs的新手,我正在尝试使用多个查询在单个页面中显示结果。我使用异步并行来获得结果,但我无法处理请求。
这是我的回调函数
gettournamentDetail: function (res, req) {
var connection = mysqlConnectionProvider.getSqlConnection();
//var test=[];
var collection = { collection:[] };
var sqlStatement = "SELECT * FROM tournaments WHERE tournamentId =" + res;
var tgroup1 = { collection:[]};
var tournamentdetails = [];
var sqlStatement2 = "select * from " +
"(SELECT DISTINCT teamId, teamName,ttournament FROM teams, tournamentTeam WHERE ttournament=" + res + ") as main LEFT JOIN (SELECT DISTINCT groupName,groupTournament FROM groupTeam,tournamentGroup WHERE groupt=tgId) as sub ON sub.groupTournament=main.ttournament";
// var return_data = {};
async.parallel([
function () {
if (connection) {
connection.query(sqlStatement, function (err, rows, fields) {
rows.forEach(function (row) {
tournamentdetails=row;
});
req(tournamentdetails);
});
}
},
function () {
var tgroup=[];
if (connection) {
connection.query(sqlStatement2, function (err, rows, fields) {
for (var i in rows) {
tgroup.push("group",{
teamName: rows[i].teamName,
teamId: rows[i].teamId,
groupName: rows[i].groupName
});
}
req(tgroup);
});
}
}
这是我的路由页面 exports.tournamentDetail = function(req,res){
var tournamentdetail = require(' ../ database / getTournament.js');
tournamentdetail.tournament.gettournamentDetail(req.params.id,function(collection){ 的console.log(集合); //res.render('tournamentdetail',{title:'比赛详情',tdetail:collection});
}); };
任何想法如何处理显示数据的两个请求。 这就是我获取数据的方式
RowDataPacket {
tournamentId: 1,
tournamentUser: 1,
tournamentDate: 1472299200,
tournamentLocation: 'Reading',
tournamentDesc: 'An alternative to renaming app.js is to create an elastic beanstalk configuration file. Add a .config file into the .ebextensions folder, for example, .ebextensions/34.config. Change the NodeCommand setting in the namespace aws:elasticbeanstalk:container:nodejs to whatever command you want to run to start the server. For example, this is a minimal .config file to run npm start instead of app.js:\n\n',
tournamentInfo: 'Test',
tournamentCreated: 1471171131,
tournamentName: 'Ping Pong' }
[ 'group',
{ teamName: 'TeamName', teamId: 1, groupName: 'A' },
'group',
{ teamName: 'Team2', teamId: 2, groupName: 'A' } ]
答案 0 :(得分:1)
我很少简化你的代码,但我并不完全明白你的需求。
// connect on application start
var connection = mysqlConnectionProvider.getSqlConnection();
if (!connection)
throw new Error('Smth wrong');
...
let getTournamentDetail = function (tournament_id, callback) {
// I think both queries are bad, because they used Cartesian product and distinct
// Use placeholder to escaping params; it's more safety
var sql = 'select * from tournaments where tournamentId = ??';
var sql2 = 'select distinct teamId, teamName, ttournament '+
'from teams, tournamentTeam WHERE ttournament = ??) as main ' +
'left join (select distinct groupName, groupTournament ' +
'from groupTeam, tournamentGroup where groupt = tgId) as sub ' +
'on sub.groupTournament = main.ttournament";
async.parallel([
function (callback) { connection.query(sql, [tournament_id], callback) },
function (callback) { connection.query(sql2, [tournament_id], callback) }
],
function (err, results) {
if (err)
return callback(err);
callback(null, {tournamentdetails: results[0], tgrup: results[1]})
}
);
}
...
var youRouteFunc = function (req, res) {
getTournamentDetail(req.params.id, function (err, data) {
if (err)
return res.send(err.message);
res.render('tournamentdetail', {title: 'Tournament Detail ', tdetail: data});
});
}