在异步读取JSON文件时,出现了意外的JSON输入结束
在异步读取JSON文件时,出现了意外的JSON输入结束
我是node js的新手,正在我的项目中使用MVC模式,所以当我尝试将产品添加到我的cart.json文件中时,我遇到了问题:
路由文件
const Product = require('../models/product'); const Cart = require('../models/cart') exports.postcart = (req,res,next) => { const proid = req.params.productcartid Product.findbyid(proid).then(function(value) { console.log(value.price) // 正确打印价格,因此产品作为参数接收到了 Cart.addProduct(proid, value.price) }) }
产品模型
module.exports = class Product { // 构造函数在这里 save() { // 在这里保存产品,工作正常 } static findbyid(id) { const p = path.join(path.dirname(process.mainModule.filename), 'data', 'products.json') return new Promise((resolve, reject) => { fs.readFile(p, (err, data) => { const allproducts = JSON.parse(data) const result = allproducts.find(p => p.id === id) return resolve(result) }) }) } }
购物车模型
module.exports = class Cart { static addProduct(id, price) { const p = path.join(path.dirname(process.mainModule.filename), 'data', 'cart.json') fs.readFile(p, (error, file) => { console.log('sgdf',id); let cart = { products: [], totalPrice: 0 }; if(!error) { console.log('inside error') // 在控制台输出 cart = JSON.parse(file); } console.log('outside error') // 不会输出,并且从这里开始的任何内容都不会在控制台输出 const existingProductIndex = cart.products.findIndex(p => p.id === id); console.log('dghjhjghfg',existingProductIndex) // 不会输出 const existingProduct = cart.products[existingProductIndex]; if(existingProduct) { existingProduct.qty += 1; } else { cart.products.push({ id, qty: 1 }); } cart.totalPrice += Number(price); console.log(cart); fs.writeFile(p, JSON.stringify(cart), error => { if(error) return console.error(error); }); }); } };
cart.js
const fs = require('fs') const path = require('path') module.exports = class Cart { static addProduct(id, price) { const p = path.join(path.dirname(process.mainModule.filename), 'data', 'cart.json') fs.readFile(p, (error, file) => { console.log('sgdf',id); let cart = { products: [], totalPrice: 0 }; if(!error) { console.log('insdie error') console.log(file) cart = JSON.parse(file) } console.log('outside error') const existingProductIndex = cart.products.findIndex(p => p.id === id); console.log('dghjhjghfg',existingProductIndex) const existingProduct = cart.products[existingProductIndex]; if(existingProduct) { existingProduct.qty += 1; } else { cart.products.push({ id, qty: 1 }); } console.log('adsgfdgfh') cart.totalPrice += Number(price); console.log(cart); fs.writeFile(p, JSON.stringify(cart), error => { if(error) return console.error(error); }); }); } };
我遇到的错误是
undefined:1 SyntaxError: Unexpected end of JSON input at JSON.parse () at /Users/ratnabhkumarrai/Desktop/max-project/models/cart.js:15:29 at FSReqCallback.readFileAfterClose [as oncomplete] (internal/fs/read_file_context.js:61:3)
在我的Cart模型中,当我尝试使用console.log查看时,我发现只有我的代码的一部分被执行,我尝试在下面的console.log中,但它们没有被执行...我在这里做错了什么?