Estoy tratando de obtener ciertos parámetros de mi solicitud de obtención del lado del cliente (que provienen de la entrada del usuario), para alimentar una API y obtener una solicitud que envío a mi servidor.
Recibo este error cuando uso .get en mi variable search_params. Estoy usando el paquete node.js 'URL'.
no estoy seguro de por qué no está definido, seguí esta guía para encontrar una solución a lo que estoy tratando de resolver - 1
Código a continuación: (Comenté las dos líneas que causan el error para que sea más fácil de ver)
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+':x@api.bamboohr.com/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;Por lo que veo, full_url es solo una cadena concatenada que obviamente no tiene ningún método/atributo searchParams como lo tendría un objeto.
Entonces sabemos que full_url.searchParams no está definido. Esto evaluaría a
const search_params = undefinedlo que resulta en su problema.
¿Usaste un depurador? Sería útil ver cómo se ve full_url durante el tiempo de ejecución. No obstante, ser una cadena debería ser el problema aquí.
Hay una pequeña cosa que necesita saber y agregar. full_url es una cadena que no tiene searchParams. Entonces, conviértalo en un objeto URL y use sus métodos.
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}:x@api.bamboohr.com/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;