I have an express router set up in my back end that I want to return some information to my front end with, but I am trying to separate it out into separate functions so that I can re-use some of the functions.
When I make the request within my router function it behaves as expected, however when I break it out it always comes back as undefined, which makes me think I am not returning it correctly.
The following works, and returns the project link I am trying to get:
router.get('/test', (req, res) => {
var options = {
method: 'GET',
url: url + '/api/projects',
headers:
{
Cookie: req.params.token
},
qs:
{
limit: '1000',
q: `name:${req.params.project_name}`
}
};
request(options, (error, response, body) => {
if (error) {
throw new Error(error);
}
const jsonBody = JSON.parse(body);
const projectLink = jsonBody.items[0]['_meta']['href']
console.log(projectLink)
return res.send({ "project_link": projectLink })
});
})
However when I try to break the above request out into its own function and call it from router.get('/test') it comes back as undefined, however it logs the expected value within test():
router.get('/test', (req, res) => {
let projectId;
projectId = test(req.query.bearer_token, req.query.project_name);
console.log('projID', projectId);
return res.send(projectId)
})
let test = ( token, project_name ) => {
var options = {
method: 'GET',
url: url + '/api/projects',
headers:
{
Cookie: token
},
qs:
{
limit: '1000',
q: `name:${project_name}`
}
};
request(options, (error, response, body) => {
if (error) {
throw new Error(error);
}
const jsonBody = JSON.parse(body);
const projectLink = jsonBody.items[0]['_meta']['href']
console.log(projectLink)
return projectLink
});
}
I suspect there is a bit of request inception happening that is complicating things, as a request is being made from the front end which is calling a function that is returning a request. What is the proper way to return projectLink?