2

I want to know the best way to return a bunch of JSON that is the result of some dependent mysql queries.

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) {

Now we have a bunch of rows -- lets say 5. I need to go through each one and make another mysql query based on the data I just got. So I end up needing to repeat call (do I loop?)

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

             });
           }
        }

How do I combine the rows from each of the repeated selects of the second query into a single object that can be returned as JSON?

            res.writeHead(200, {'Content-Type': 'text/plain'});
            res.end(JSON.stringify(results));
            }
        });
    }
});
1
  • are you sure you can't have one sql statement here with join? Commented Jul 29, 2013 at 1:15

1 Answer 1

2

Asked and answered.

The Async.js utility has lots of good stuff including a map function and underscores.js helps tidy anything up!

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);
        }
    });

}

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.