Actualmente estoy trabajando en una aplicación meteorológica y estoy usando Axios para ejecutar una solicitud de obtención a una API meteorológica de terceros. Puedo recuperar los datos necesarios cuando ejecuto la solicitud de API en Postman. Sin embargo, cuando ejecuto esta solicitud con Axios, recibo un error de solicitud incorrecta 400. Revisé los documentos de Axios para ver si había un problema en mi formato, pero no encontré diferencias en su documentación y mi código. He estado trabajando en esto durante un par de horas y estoy perplejo si ven algo malo en mi código que podría estar causando este error.
este es mi codigo
app.get("/weatherquery/:zip", (req, res) => { axios({ url: "api.openweathermap.org/data/2.5/weather?zip=08060&appid=[CHANGE_FOR_YOUR_APPID]", }) .then((result) => res.send(result)) .catch((error) => { console.log(error); res.send(error.message); }); });y este es el error
400 { connection: 'close' } { transitional: { silentJSONParsing: true, forcedJSONParsing: true, clarifyTimeoutError: false }, adapter: [Function: httpAdapter], transformRequest: [ [Function: transformRequest] ], transformResponse: [ [Function: transformResponse] ], timeout: 0, xsrfCookieName: 'XSRF-TOKEN', xsrfHeaderName: 'X-XSRF-TOKEN', maxContentLength: -1, maxBodyLength: -1, validateStatus: [Function: validateStatus], headers: { Accept: 'application/json, text/plain, */*', 'User-Agent': 'axios/0.23.0' }, url: 'api.openweathermap.org/data/2.5/weather?zip=08060&appid=73faabe2b55b90dc0d0c89c4899b2a94', method: 'get', data: undefined }Compruebe https:// en la URL:
var axios = require('axios'); var config = { method: 'get', url: 'https://api.openweathermap.org/data/2.5/weather?zip=08060&appid=[CHANGE_FOR_YOUR_APPID]', headers: { } }; axios(config) .then(function (response) { console.log(JSON.stringify(response.data)); }) .catch(function (error) { console.log(error); });Cada vez que una API funciona en Postman, pero no en una página web, es probable que se deba a problemas de CORS. Como medida de seguridad, los navegadores evitan que se realicen solicitudes "entre sitios"... p. solicitudes de sudominio.com a openweathermap.org.
Si openweathermap.org ofrece soporte CORS de alguna manera (o JSONP, y una solución anterior), aún puede acceder a él. De lo contrario, necesitará un servidor de algún tipo que pueda servir como un "proxy" (es decir, realiza una solicitud a su servidor, en el mismo dominio, y realiza la solicitud a la API meteorológica).