node.js - 从 Node/Express 中的另一个路由中调用 API 端点

标签 node.js express

我的 myRoute.js 定义了一个路由 (GET),我想从另一个路由 (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;  
   });  
});

按预期工作:

enter image description here

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

最佳答案

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

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

您可以在另一条 route 做同样的事情:
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});
});

看起来很清楚:)

关于node.js - 从 Node/Express 中的另一个路由中调用 API 端点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51369866/

相关文章:

html - 通过 Nodejs 中间件路由某些请求子集时 HTML 中的相对 URL

javascript - 在 AWS Lambda 上“找不到模块 fluence-ffmpeg”

node.js - 使用命名管道的 Node HTTP 请求

javascript - 使用 TypeScript 和 Sails.js 会出现问题,TypeError : object is not a function

node.js - Sequelize - 不能从多对多选择中获得正确的结果

node.js - 通过单独的服务器提供静态文件

javascript - ejs <%- body %> 不工作

javascript - 如何使用 AngularJS 上传文件并使用 ExpressJS 保存?

node.js - Express.js 路由带有可选参数?

node.js - 如何在 express.js 应用程序中的多个文件上使用套接字 io 实例