Только начал с node.js и экспресс, и я пытался показать файл json, содержащий массив из 3 объектов с методом класса
Вот структура класса
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 = GrupoArchivo
А вот Js файл с экспресс сервером
Со вторым «app.get» я безуспешно пытался получить метод, показывающий файл json.
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.info("server listening on port", 8080)
})
Все функции async
возвращают промис, поэтому, когда вы его вызываете, вы должны использовать await
или .then()
, чтобы получить разрешенное значение из этого промиса. Вы можете добавить async
и await
следующим образом:
app.get("/productos", async (req, res) => {
try {
res.json(await grupo.obtenerTodas());
} catch(e) {
console.info(e);
res.sendStatus(500);
}
});
Обратите внимание, что это также добавляет обработку ошибок, чтобы вы могли отлавливать любые ошибки из grupo.obtenerTodas()
.
Большое спасибо! Я не знаю, как я пропустил это, но вы сэкономили мне много времени!
Вы должны
await grupo.obtenerTodas()