我的 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;
});
});
按预期工作:
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/