Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

In Express or connect with Node.js, is there a way to call another route internally?

So, I have the setup like this (in Express):

app.get('/mycall1', function(req,res) { res.send('Good'); });
app.get('/mycall2', function(req,res) { res.send('Good2'); });

What if I want make an aggregate function to call /mycall1 and /mycall2 without rewriting code and reusing code for /mycall1 and /mycall2?

For example:

app.get('/myAggregate', function (req, res) {
  // call /mycall1
  // call /mycall2  
});
like image 314
murvinlai Avatar asked Feb 28 '12 00:02

murvinlai


1 Answers

No, this is not possible without rewriting or refactoring your code. The reason is that res.send actually calls res.end after it is done writing. That ends the response and nothing more can be written.

As you hinted to, you can achieve the desired effect by refactoring the code so that both /mycall1 and /mycall2 call separate functions internally, and /myAggregate calls both the functions.

In these functions, you would have to use res.write to prevent ending the response. The handlers for /mycall1, /mycall2, and /myAggregate would each have to call res.end separately to actually end the response.

like image 80
Rohan Singh Avatar answered Sep 26 '22 12:09

Rohan Singh