首页 > 解决方案 > 从 Node / Express 中的另一个路由中调用 API 端点

问题描述

我定义了一个路由 (GET) 的 myRoute.js,我想从另一个路由 (api.js) 调用一个 api 端点,但我不确定这样做的正确方法是什么。api.js 路由工作正常(下面的图像和代码)。

api.js

router.get('/getGroups/:uid', function(req, res, next) {    
  let uid = req.params.uid;
  db.getAllGroups(uid).then((data) => {
    let response =[];
    for (i in data) {
      response.push(data[i].groupname);
    }
    res.status(200).send(response);
   })
   .catch(function (err) {
     return err;  
   });  
});

按预期工作:

在此处输入图像描述

myRoute.js

我希望当用户访问 localhost:3000/USER_ID 时,路由定义会从 api 获取信息。下面的伪代码(someFunction)。

router.get('/:uid', function(req, res, next) {
  let uid = req.params.uid;
  let fromApi = someFunction(`localhost:3000/getAllGroups/${uid}`); // <--!!!
  console.log(fromApi) ;  //expecting array
  res.render('./personal/index.jade', {fromApi JSON stringified});
});

标签: node.jsexpress

解决方案


不确定我是否理解你的正确,但无论如何我会尽力提供帮助。所以你有一个像

router.get('/getGroups/:uid', function(req, res, next) {    
  let uid = req.params.uid;
  db.getAllGroups(uid).then((data) => {
    let response =[];
    for (i in data) {
      response.push(data[i].groupname);
    }
    res.status(200).send(response);
   })
   .catch(function (err) {
     return err;  
   });  
});

如果你想重用它,你可以从上面的代码中提取一个函数,如下所示:

async function getAllGroupsByUserId(uid){
  const result = [];
  try{
    const data = await db.getAllGroups(uid);
    for (i in data) {
      result.push(data[i].groupname);
    };
    return result;
  }
  catch(e) {
    return e;
  }
}

然后在您的 api 和您想要的任何地方重用它:

router.get('/getGroups/:uid', async function(req, res, next) {    
  const uid = req.params.uid;
  const groups = await getAllGroupsByUserId(uid);
  res.status(200).send(groups);
})

同样你可以在你的另一条路线上做:

router.get('/:uid', async function(req, res, next) {
  const uid = req.params.uid;
  const fromApi = await getAllGroupsByUserId(uid); // <--!!!
  console.log(fromApi) ;  //expecting array
  res.render('./personal/index.jade', {fromApi JSON stringified});
});

看起来很清楚:)


推荐阅读