Acabo de comenzar con node.js y express y estaba tratando de mostrar un archivo json que contiene una matriz de 3 objetos con un método de clase
Aquí está la estructura de la clase.
const fs = require('fs') class GrupoArchivo { constructor(ruta) { this.ruta = ruta this.productos = [] } _leer() { return fs.promises.readFile(this.ruta, 'utf-8') .then(texto => { const productosComoArray = JSON.parse(texto) this.productos = productosComoArray }) } async obtenerTodas() { await this._leer() return [...this.productos] } } module.exports = GrupoArchivoY aquí está el archivo Js con el servidor express
Con el segundo "app.get" estaba tratando de obtener el método que muestra el archivo json sin suerte
const express = require("express"); const GrupoArchivo = require('./GrupoArchivo.js') const path = require("path"); const app = express(); app.get("/", (req, res)=>{ res.sendFile(path.join(__dirname + "/index.html")) }) const grupo = new GrupoArchivo('./productos.json') app.get("/productos", (req, res)=> res.json(grupo.obtenerTodas()) //this returned me an {} ) app.listen(8080, ()=>{ console.log("server listening on port", 8080) })Todas las funciones async devuelven una promesa, por lo que cuando la llama, debe usar await o .then() para obtener el valor resuelto de esa promesa. Puede agregar async y await así:
app.get("/productos", async (req, res) => { try { res.json(await grupo.obtenerTodas()); } catch(e) { console.log(e); res.sendStatus(500); } }); Tenga en cuenta que esto también agrega el manejo de errores para que pueda detectar cualquier error de grupo.obtenerTodas() .