Cómo utilizar una API en Express
Estoy intentando utilizar la API de aquí http://www.postalpincode.in/Api-Details
const express = require('express')
const app = express()
const https = require("https");
const bodyParser = require("body-parser")
const port = 3000
app.use(bodyParser.urlencoded({ extended: true }));
app.get('/', (req, res) => res.sendFile(__dirname + "/index.html"))
app.post("/", (req, res) => {
const query = req.body.cityData; // obtiene la entrada del formulario
// const dataType = req.body.dataType;
const url = <code>https://api.postalpincode.in/pincode/586101</code>;
https.get(url, (response) => {
response.on("data", (data) => {
const pinData = data(); // convierte otros formatos en json
const place = pinData.0.PostOffice[0].Name; //<== en esta línea se muestra error por el 0 después de pinData
res.set("Content-Type", "text/html");
res.send(`place:${place}
`);
});
});
});
app.listen(port, () => console.log(`¡Aplicación de ejemplo escuchando en el puerto ${port}!`))
davy.ai
Pregunta
¿Cuál es el propósito de este código? ¿Por qué no está funcionando correctamente y qué error específico se está encontrando?
Respuesta
El propósito de este código es crear una aplicación web simple que tome el nombre de una ciudad ingresado por el usuario y devuelva el código postal correspondiente para esa ciudad utilizando una API proporcionada por http://www.postalpincode.in.
El código está encontrando un error específicamente en esta línea:
const place = pinData.0.PostOffice[0].Name;
. El problema es que el0
se está utilizando como nombre de propiedad, lo cual no es una sintaxis válida en JavaScript. Para acceder al primer elemento de un array o de un objeto literal, se deben utilizar corchetes en lugar de la notación de punto.Por lo tanto, para solucionar este error, la línea debería actualizarse a:
const place = pinData[0].PostOffice[0].Name;
. De esta manera, el código puede acceder al primer elemento del arraypinData
y luego acceder a la propiedadPostOffice
de ese elemento para obtener el valor deseado de la propiedadName
.