Using REACT. My button edit is not working, I get error 304

Viewed 21

What I need to do is hit edit button, display the edit page, save the edits and render the changes. I am stuck in saving the changes, I get error 304 in mongodb. I am using front end and back end. Currently it loads the edit page but once I hit save changes the database connection is lost.

Back end, this is the controller:

import { RequestHandler } from "express";
import { Coffee, ICoffee } from "../models/coffee";
import { IUser } from "../models/user";
import { verifyUser } from "../services/auth";


export const getAllCoffee: RequestHandler = async (req, res, next) => {
    let coffeeList = await Coffee.find();
    res.status(200).json(coffeeList);
}

export const getOneCoffee: RequestHandler = async (req, res, next) => {
    let itemId = req.params.id;
    let coffee = await Coffee.findById(itemId);
    res.status(200).json(coffee);
}

export const addCoffee: RequestHandler = async (req, res, next) => {
    let user: IUser | null = await verifyUser(req);

    if (!user) {
        return res.status(403).send();
    }

    const newCoffee: ICoffee = new Coffee({
        name: req.body.name,
        description: req.body.description,
        price: req.body.price
    });

    try {
        await newCoffee.save();
        res.status(201).json(newCoffee);
    }
    catch (err) {
        res.status(500).send(err);
    }
}

export const editCoffee: RequestHandler = async (req, res, next) => {
    let user: IUser | null = await verifyUser(req);

    if (!user) {
        return res.status(403).send();
    }

    let itemId = req.params.id;
    const updatedCoffee = {
    name: req.body.name,
    description: req.body.description,
    price: req.body.price,
  };
  
  res.json(
    await Coffee.findByIdAndUpdate(itemId, updatedCoffee, {
      returnDocument: "after",
    })
  );

Coffee.ts:

import { Document, Schema, Model, model } from 'mongoose';

interface ICoffee extends Document {
    name: string;
    description: string;
    price: number;
}

const coffeeSchema: Schema = new Schema({
    name: {
        type: String,
        required: true,
        unique: true
    },
    description: {
        type: String,
        required: true
    },
    price: {
        type: Number,
        required: true
    }
});

const Coffee: Model<ICoffee> = model<ICoffee>('Coffee', coffeeSchema);

export { ICoffee, Coffee };

CoffeeRoutes.ts:

import { Router } from 'express';
import { addCoffee, editCoffee, deleteCoffee, getAllCoffee, getOneCoffee } from '../controllers/coffeeController';

const router = Router();

router.get('/', getAllCoffee);
router.get('/:id', getOneCoffee);
router.post('/', addCoffee);
router.put('/:id', editCoffee);
router.delete('/:id', deleteCoffee);

export default router;

Can anybody help me, please? Thanks!

1 Answers

Try to change your update query like this:

export const editCoffee: RequestHandler = async (req, res, next) => {
  let user: IUser | null = await verifyUser(req);

  if (!user) {
    return res.status(403).send();
  }

  let itemId = req.params.id;
  const updatedCoffee = {
    name: req.body.name,
    description: req.body.description,
    price: req.body.price,
  };

  const coffee = await Coffee.findByIdAndUpdate(itemId, updatedCoffee, {
    new: true,
  });

  res.json(coffee);
};
Related