Soy bastante nuevo en TypeScript y trato de hacer que un servidor Express funcione con él. Entonces, básicamente estoy tratando de hacer que se ejecute el siguiente código después de obtener datos con axios:
import express, { Response, Request } from 'express' (...) app.get('/api/mk', async (req: express.Request, res: express.Response) => { await axios .get('http://localhost:8080/rest/kuk/v1/ownerMKKOL/getALL') .then((axiosResponse) => { const { data } = axiosResponse return res.status(200).send(data) }) .catch((err) => err) })Sin embargo, recibo el siguiente mensaje de error y no puedo entenderlo:
Esta expresión no es invocable. El tipo 'Número' no tiene firmas de llamada. TS2349
¿Tengo que ampliar la interfaz de Response ? Si es así, ¿cómo sería una posible solución?
¡Cualquier ayuda es muy apreciada!
Solución:
Finalmente encontré la solución que básicamente se redujo a un problema con la estructura de mi proyecto:
Root |-- React App |-- Server | |-- package.json | `-- ... `-- package.json `-- ... De alguna manera, al ejecutar el comando de compilación desde mi paquete de la React App , aparecería este problema. Reestructuré mi proyecto de la siguiente manera y el problema desapareció:
Root |-- Server | |-- package.json | |-- express.ts | `-- ... `-- Client |-- package.json `-- ...En su código, está esperando un resultado prometido, pero también está registrando una función de devolución de llamada para un resultado y una devolución de llamada para una falla. Esto también devolverá una promesa, por lo que el código es correcto, pero no está devolviendo el valor y esto genera el error.
Además, mezclar la forma .then().catch() con la sintaxis await no es fácil de leer. Yo cambiaría el código de esta manera:
app.get('/api/mk', async (req: express.Request, res: express.Response) => { const axiosResponse = await axios .get('http://localhost:8080/rest/kuk/v1/ownerMKKOL/getALL'); const { data } = axiosResponse; return res.status(200).send(data); })Si se lanza una excepción, se disparará automáticamente y pasará a express: no es estrictamente necesario procesarla, ya que en su código de inicio no está haciendo nada más que lanzarla nuevamente.