2013-07-28 3 views
2

Я хочу знать лучший способ вернуть кучу JSON, что является результатом некоторых зависимых запросов mysql.Объединение строк результата result-mysql в одиночный возврат JSON для node.js

app.get('/viewing/:id', function (req, res){ 
    if(!req.cookies.user) { 
     res.end('Requires Authenticated User'); 
    } else { 
     connection.query('SELECT blah blah where userId='+req.params.id, 
     function (error, rows, fields) { 

Теперь у нас есть куча строк - позволяет говорить 5. Мне нужно пройти через каждый из них и сделать еще один запрос MySQL, основанный на данных, я только что получил. Так что в конечном итоге нужно повторить вызов (я сделать петлю?)

  connection.query('SELECT id, firstName, lastName from users where id='+AN_ID_FROM_PRIOR_QUERY, 
      function (error2, rows2, fields2) { 

      }); 
      } 
     } 

Как объединить строки из каждого из повторных выбирает второго запроса в единый объект, который может быть возвращен как JSON?

  res.writeHead(200, {'Content-Type': 'text/plain'}); 
      res.end(JSON.stringify(results)); 
      } 
     }); 
    } 
}); 
+0

вы уверены, что вы не можете иметь один SQL заявление здесь с присоединиться? –

ответ

2

Вопрос и ответы.

У утилиты Async.js есть много хороших вещей, включая map function и underscores.js помогает убрать что-нибудь!

app.get('/viewing/:id', function (req, res){ 
    if(!req.cookies.user) { 
     res.end('Requires Authenticated User'); 
    } 
    else { 
    connection.query('SELECT something,somethingelse from mytable where userId = ?',[req.params.id], function (error, rows, fields) { 
     async.map(rows, getUsers, function(err, results){ 
     res.writeHead(200, {'Content-Type': 'text/plain'}); 
     res.end(JSON.stringify(_.flatten(_.compact(results)))); 
     }); 
    }); 
    } 
}); 

function getUsers(user, callback) { 
    connection.query('SELECT id,firstName,lastName FROM users WHERE id = '+ user.otherId, function(err, info) { 
     if(err) { 
      console.log(err); 
      return callback(err); 
     } 
     else { 
      return callback(null, info); 
     } 
    }); 

}