从另一条路线的路线内快速调用 GET 方法

新手上路,请多包涵

我有多条路线。如何通过在组路由的 GET 方法中调用用户路由(GET 方法)来获取数据?这样做的最佳方法是什么?

我的 app.js 看起来像这样:

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

然后我有另一个文件 routes/users.js:

 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;

还有另一条路线routes/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;

原文由 asuciu 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 713
2 个回答

您不应该为此使用路由。只需调用负责从 GET 组路由中检索用户的函数并使用该数据执行您需要的操作。您提出的方式要贵得多,因为您必须进行 http 调用。

为简单起见,我假设您的逻辑是同步的,并且数据存储在 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');
});

原文由 Slawomir Pasko 发布,翻译遵循 CC BY-SA 3.0 许可协议

我认为正在解释的是“转发”,它非常有用,并且在其他框架和其他语言中可用。

此外,作为“转发”,它 不会 从后续 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)

原文由 conrad10781 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题