node.js - 从 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});
});
解决方案
不确定我是否理解你的正确,但无论如何我会尽力提供帮助。所以你有一个像
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});
});
看起来很清楚:)
推荐阅读
- python - 如何在使用 matplotlib 绘图时在 x 轴上绘制均匀间隔的值
- c# - 是否可以使用 ASP.NET 从相应的 .cs 文件中定位 .aspx 文件中的 html 元素?
- javascript - 我在 Windows 终端上执行 JavaScript 文件时遇到问题
- php - 如何在 MySQL 查询中包含 PHP 变量
- docker - 如何从 BitBucket Pipeline 启动声纳扫描仪 docker 映像?
- php - 如何在 CI 中检查数据库中的匹配结果?
- opencv - 为什么 cv_bridge 在 ROS Melodic 中使用 OpenCV 3.2?
- arrays - 过滤/跳过缺失的 API 数组结果在 React (Hooks) 中不起作用
- c# - 即使有限制,我的播放器仍然会旋转
- keras - 如何获得在keras中没有的batch_size的真实形状