I am trying to get certain params from my client-side get request (which come from user input), to feed into an API get a request I send off on my server.
I get this error when using .get on my search_params variable. I am using the 'URL' node.js package.
not sure why it is undefined I followed this guide to work out a solution to what I am trying to solve - 1
Code below: (I commented out the two lines that are causing the error so it is easier for you to see)
const axios = require('axios');
const router = require('express').Router();
const url = require('url');
require('dotenv').config();
const bamboo_api_key = process.env.BAMBOO_API_KEY;
const config = {
headers: {
'Accept':'application/json'
}
};
router.get('/bamboo/absencees', (req, res) => {
const full_url = req.protocol '://' req.get('host') req.originalUrl;
const search_params = full_url.searchParams;
// const start = search_params.get('start')
// const end = search_params.get('end')
console.log("full url: ", fullUrl);
console.log(end);
console.log(sart);
axios.get('https://' bamboo_api_key ':[email protected]/api/gateway.php/velocitypartners/v1/time_off/whos_out/' req.query.params, config)
.then((response) => {
console.log(response)
console.log(req.query.params)
res.send(response.data)
})
.catch(error => {
console.log(error)
});
})
module.exports = router;
CodePudding user response:
From what I see full_url
is just a concatenated string which obviously has no method/attribute searchParams
like an object would have.
So we know that full_url.searchParams
is undefined.
This would evaluate to
const search_params = undefined
which results in your problem.
Did you use a debugger? It would be helpful to see what full_url
looks like during run-time. Nonetheless, it being a string should be the problem here.
CodePudding user response:
There is a small thing, you need to know and add. full_url
is a string that doesn't have searchParams. So, make it a URL object and use their methods.
const axios = require('axios');
const router = require('express').Router();
const url = require('url');
require('dotenv').config();
const bamboo_api_key = process.env.BAMBOO_API_KEY;
const config = {
headers: {
'Accept':'application/json'
}
};
router.get('/bamboo/absencees', (req, res) => {
const full_url = req.protocol '://' req.get('host') req.originalUrl;
const myURL = new URL(full_url); // make it an URL object to use its methods
const search_params = myURL.searchParams;
const start = search_params.get('start')
const end = search_params.get('end')
console.log("full url: ", fullUrl);
console.log(end);
console.log(sart);
// you can use string literal here
axios.get(`https://${bamboo_api_key}:[email protected]/api/gateway.php/velocitypartners/v1/time_off/whos_out/${req.query.params}` , config)
.then((response) => {
console.log(response)
console.log(req.query.params)
res.send(response.data)
})
.catch(error => {
console.log(error)
});
})
module.exports = router;