在异步读取JSON文件时,出现了意外的JSON输入结束

9 浏览
0 Comments

在异步读取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中,但它们没有被执行...我在这里做错了什么?

0