Эй, я новичок в Nodejs и пытаюсь отредактировать свои продукты в моих nodejs с помощью экспресс-проекта
Поэтому я сталкиваюсь с проблемой, возникающей при обновлении моего продукта, который хранится в моем файле products.json
файл контроллеров
const Product = require('../models/product');
exports.posteditproduct = (req, res, next) => {
const upprodid = req.body.productid
const upprodtitle = req.body.title
const upprodprice = req.body.price
const upprodimg = req.body.imageurl
const upproddesc = req.body.description
const updatedproduct = new Product(upprodid, upprodtitle, upprodimg, upprodprice, upproddesc);
updatedproduct.save()
res.redirect('/')
}
Модель продуктов
const fs=require('fs');
const path=require('path');
module.exports=class Product{
constructor(id,title,imageurl,price,description){
this.id=id
this.title=title;
this.imageurl=imageurl
this.price=price
this.description=description
}
save(){
if(this.id){
console.log(this.id) //prints the id correctly
const p=path.join(path.dirname(process.mainModule.filename),
'data','products.json')
fs.readFile(p,(err,data)=>{
const datainfile=JSON.parse(data)
const existproduct=datainfile.findIndex
(prod=>prod.id===this.id)
const upproduct=[...datainfile]
console.log('spread=================================')
console.log(this)
upproduct[existproduct]=this
fs.writeFile(p,JSON.stringify(upproduct),err=>{
console.log(upproduct) //prints all the data that i have in my file and replaces the updated product with the old product, the output is what i expected..
})
})
}
else
this.id=Math.random().toString()
const p=path.join(path.dirname(process.mainModule.filename),
'data','products.json')
fs.readFile(p,(err,data)=>{
let products
if(err){
products=[]
}
if(!err){
products=JSON.parse(data)
}
products.push(this)
fs.writeFile(p,JSON.stringify(products),err=>{
// console.log(err)
})
})
}
}
Вывод до обновления
[
Product {
id: '0.3812592138104218',
title: 'Burger',
imageurl:
'https://www.seriouseats.com/recipes/images/2015/07/20150702-sous- vide - hamburger - anova - primary - 1500x1125.jpg',
price: '7.5',
description: 'Very tasty, must try !'
},
{
title: 'Pepsi',
imageurl: 'https://target.scene7.com/is/image/Target/GUEST_26aa6df7-2fdf - 4b4b- 9f3b - d2ea31b5d685 ? wid = 488 & hei=488 & fmt=pjpeg',
price: '5',
description: 'Strong !',
id: '0.9829663341239048'
}
]
Вывод после обновления (Обновите название продукта Burger)
[
Product {
id: '0.3812592138104218',
title: 'Burger after trying to update',
imageurl: 'https://www.seriouseats.com/recipes/images/2015/07/20150702-sous-vide-hamburger-anova-primary-1500x1125.jpg',
price: '7.5',
description: 'Very tasty, must try !'
},
{
title: 'Pepsi',
imageurl: 'https://target.scene7.com/is/image/Target/GUEST_26aa6df7-2fdf-4b4b-9f3b-d2ea31b5d685?wid=488&hei=488&fmt=pjpeg',
price: '5',
description: 'Strong !',
id: '0.9829663341239048'
}
]
Все хорошо ... теперь, как в моем методе сохранения, наконец, я записываю данные в файл, поэтому возникает проблема ... когда я записываю все данные в мой файл, обновленный продуктне заменяет старый продукт, вместо этого он также добавляется в мой файл json, но я хочу заменить более старую запись новой, не добавляя ее по более старой записи