tanjiya
tanjiya

Reputation: 183

Node rest API: put request is not updating the request data

Trying to update data using PUT request. But, the data is not updating and returning the previous data in postman.

Postman put request:

http://localhost:3000/api/actors/5daa8f1c5845ad0b5826b8d9?name=Tom

Postman response:

{
    "createdAt": "2019-10-19T04:16:13.317Z",
    "updatedAt": "2019-10-19T04:16:13.317Z",
    "_id": "5daa8f1c5845ad0b5826b8d9",
    "name": "scarlett johansson",
    "birthday": "1980-10-14T00:00:00.000Z",
    "country": "usa",
    "__v": 0
}

I have also tried to use findByIdAndUpdate. Didn't get the result. Any help would be appreciated.

Controller:

exports.updateActor = async(req, res, next) => {
    try {
        const actorId = req.params.actorId;
        const data    = req.body;

        const updateActor = await Actor.findById(actorId);

        updateActor.set(data);

        const actor = await updateActor.save();

        // res.status(200).json({ message: "Data has Updated Successfully!" });
        res.send(actor);

    } catch (err) {
        res.status(500).json({ message: err.message });
    }
};

Router:

router.put('/actors/:actorId', Actor.updateActor);

Upvotes: 2

Views: 4224

Answers (4)

Mahesh Bhatnagar
Mahesh Bhatnagar

Reputation: 1080

Please use following code for getting update data 

 Actor.findOneAndUpdate({"_id":ObjectId(actorId)},data, 
 { new: true}).then((updatedData) => {
 res.send(updatedData);
 });

Upvotes: 2

stud3nt
stud3nt

Reputation: 2143

To resolve the ObjectId error use the below code.

var mongoose = require('mongoose');
const updateActor = await Actor.findOneAndUpdate({"_id":mongoose.Types.ObjectId(actorId)},data, { new: true });
res.send(updateActor);

Upvotes: 3

Cuong Le Ngoc
Cuong Le Ngoc

Reputation: 11975

Your postman request is http://localhost:3000/api/actors/5daa8f1c5845ad0b5826b8d9?name=Tom so look like the data to update will be in req.query instead of req.body.

Note: You should put the data to update in the body instead of query like you're doing.

More info here.

Upvotes: 2

vicky
vicky

Reputation: 415

exports.updateActor = async(req, res, next) => {
    try {
        const actorId = req.params.actorId;
        const data    = req.body;

        const updateActor = await Actor.update({"_id":actorId},data);


        // res.status(200).json({ message: "Data has Updated Successfully!" });
        res.send(updateActor);

    } catch (err) {
        res.status(500).json({ message: err.message });
    }
};


try thiss...

Upvotes: 0

Related Questions