Express call of the GET method in a route from another route

I have several routes. How can I get data from a custom route (GET method) by calling it in the group route GET method? What is the best way to do this?

My app.js looks like this:

var express = require('express');

var routes = require('./routes/index');
var users = require('./routes/users');
var groups = require('./routes/groups');

var app = express();

app.use('/', routes);
app.use('/users', users);
app.use('/groups', groups);

module.exports = app;
app.listen(3000);
Run codeHide result

Then I have another route / users.js file:

var express = require('express');
var router = express.Router();

/* GET users listing. */
router.get('/', function(req, res, next) {
  res.send('GET ON THE users!');
});

module.exports = router;
Run codeHide result

And another route route / groups.js:

var express = require('express');
var router = express.Router();
var otherRouter = require('./users')

/* GET groups listing. */
router.get('/', function(req, res, next) {

    // call the get on users and retrieve all data from that request

    res.send('GET for the groups');
});

module.exports = router;
Run codeHide result

Thank!:)

+4
source share
3 answers

You should not use routing for this. Just call the function responsible for extracting users from the GET route and do what you need with this data. The way you offer is much more expensive because you will need to make an http call.

, data/users.js:

var data = [{id:1, name: "one"},{id: 2, name: "two"}];
module.exports = function(){
  return data;
};

/users.js:

var express = require('express');
var router = express.Router();
var getUsers = required('./../data/users');

router.get('/', function(req, res, next) {
  res.send(getUsers());
});

/groups.js:

var express = require('express');
var router = express.Router();
var otherRouter = require('./users')
var getUsers = require('./.../data/users');

router.get('/', function(req, res, next) {
  var users = getUsers();
  //do some logic to get groups based on users variable value
  res.send('GET for the groups');
});
+8

run-middleware

app.runMiddleware('/pathForRoute',{method:'post'},function(responseCode,body,headers){
     // Your code here
})

:

: .

+2

, "", .

, "" - HTTP.

Express, 4.X. , , .

var app = express()

function myRoute(req, res, next) {
  return res.send('ok')
}

function home(req, res, next) {
   req.url = '/some/other/path'

   // below is the code to handle the "forward".
   // if we want to change the method: req.method = 'POST'        
   return app._router.handle(req, res, next)
}

app.get('/some/other/path', myRoute)
app.get('/', home)
+2

Source: https://habr.com/ru/post/1651840/


All Articles