THIS IS THE ERROR
[Error: ENOENT: no such file or directory, open ‘C:UsersUsuarioDesktopproductos.txt’] {
errno: -4058,
code: ‘ENOENT’,
syscall: ‘open’,
path: ‘C:UsersUsuarioDesktopproductos.txt’
}
[on screen it only shows me an empty obj or nothing directly]
[INDEX.JS]
const express = require("express");
const app = express();
const http = require("http").Server(app);
const fs = require("fs").promises;
const path = require("path")
const routes = require("./routes");
const io = require("socket.io")(http);
const { customAlphabet } = require("nanoid");
const nanoid = customAlphabet("1234567890", 5);
app.set("view engine", "ejs");
app.use(express.static(path.join(__dirname, "public")));
app.set("views", "./views");
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.get("/", (req, res) => {
fs.readFile("productos.txt", "utf-8");
res.render("form");
});
app.post("/productos", async (req, res) => {
fs.readFile("productos.txt", "utf-8")
.then((data) => {
const type = JSON.parse(data);
const newProduct = {
id: nanoid(),
...req.body,
};
type.push(newProduct);
fs.writeFile("productos.txt", JSON.stringify(type));
res.render("productos", {
type,
});
})
.catch((err) => {
if (!req.body.title && !req.body.price && !req.body.thumbnail) {
res.status(400).json({
error: "Bad Request",
message: "Title, price and thumbnail are required",
});
}
console.log(err);
});
});
app.get("/productos", (req, res) => {
fs.readFile("productos.txt", "utf-8").then((data) => {
res.render("productos", {
type: JSON.parse(data),
});
});
});
routes(app);
const port = 8080;
app
.listen(port, () => {
console.log(`App listening on port ${port}!`);
})
.on("error", (err) => {
console.log(err);
throw err;
});
[API.JS]
const fs = require("fs").promises;
const { customAlphabet } = require("nanoid");
const nanoid = customAlphabet("1234567890", 5);
class Productos {
constructor(txtNameFile) {
this.txtNameFile = txtNameFile;
this.productos = [];
}
async fileInJSON() {
let fileTxt = await fs.readFile(this.txtNameFile, "utf-8");
let type = JSON.parse(fileTxt);
return type;
}
async fileSaving(item) {
let type = JSON.stringify(item);
await fs.writeFile(this.txtNameFile, type);
}
async obtenerProductos() {
try {
const productos = await this.fileInJSON();
return productos;
} catch (error) {
console.log(error);
}
}
async obtenerProducto(id) {
try {
const productos = await this.fileInJSON();
const producto = productos.find((producto) => producto.id === id);
return producto;
} catch (error) {
console.log(error);
}
}
async create(data) {
try {
// create and adding product using fs module system
const newProduct = {
id: nanoid(),
...data,
};
this.productos.push(newProduct);
await this.fileSaving(this.productos);
return newProduct;
} catch (error) {
console.log(error);
}
}
async eliminarProducto(id) {
try {
const productos = await this.fileInJSON();
const producto = productos.find((producto) => producto.id === id);
const index = productos.indexOf(producto);
productos.splice(index, 1);
await this.fileSaving(productos);
} catch (error) {
console.log(error);
}
}
async actualizarProducto(id, data) {
try {
const productos = await this.fileInJSON();
const producto = productos.find((producto) => producto.id === id);
const index = productos.indexOf(producto);
productos[index] = {
...producto,
...data,
};
await this.fileSaving(productos);
return productos[index];
} catch (error) {
console.log(error);
}
}
}
module.exports = Productos;
[ROUTES/PRODUCTOSROUTER.JS]
const express = require("express");
const Productos = require("../api");
const router = express.Router();
const itemService = new Productos("../productos.txt");
router.get("/", async (req, res) => {
res.json(await itemService.obtenerProductos());
});
router.post("/", async (req, res) => {
if (!req.body.title && !req.body.price && !req.body.thumbnail) {
res.status(400).json({
error: "Bad Request",
message: "Title, price and thumbnail are required",
});
}
const producto = itemService.create(req.body);
res.json(await producto);
});
router.get("/:id", async (req, res) => {
const producto = itemService.obtenerProducto(req.params.id);
if (producto) {
res.json(await producto);
} else {
res.status(404).json({ error: "Producto no encontrado" });
}
});
router.put("/:id", async (req, res) => {
const id = req.params.id;
const producto = itemService.actualizarProducto(id, req.body);
res.json(await producto);
});
router.delete("/:id", async (req, res) => {
const id = req.params.id;
itemService.eliminarProducto(id);
res.json({ message: "Producto eliminado" });
});
module.exports = router;
[ROUTES/INDEX.JS]
const productosRouter = require("./productosRouter");
function routes(app) {
app.use("/api/productos", productosRouter);
}
module.exports = routes;