0

I'm trying to send a POST to my server, in order to edit a user's details. I've made sure it's sending to the right URL, however get a 404 response. GET requests work fine, however my POST doesn't seem to get through for whatever reason. I've been searching for solutions for a while, with no luck hence posting here!

user.js (server side)

userRoutes.route('/user/update/:id').post(function (req, response) {
    let db_connect = dbo.getDb("preview");
    let myquery = { _id: ObjectId(req.params.id) };
    let newValues = {
        $set: {
            name: req.body.name,
            user_name: req.body.user_name
        },
    };
    db_connect
        .collection("users")
        .updateOne(myquery, newValues, function (err, res) {
            if (err) throw err;
            console.log('user updated');
            response.json(res);
        })
});

middleware

export const updateUser = async (id, userDetails) => {
    const endpoint = `${serverIp}/user/update/?id=${id}`;
    try {
        const response = await fetch(endpoint, {
            method: "POST",
            headers: {
                'Accept': 'application/json',
                'Content-Type': 'application/json'
            },
            body: JSON.stringify(userDetails)
        })
        const result = await response.json();
        return result;
    } catch (error) {
        console.log(error)
    }
}

and a simple function to handle submitting

function handleSave() {
        const newUserDetails = {
            name: accountHolder,
            user_name: accountUsername
        };
        updateUser(userId, newUserDetails);
    }

Under networking in dev tools I can see the URL is indeed correct, so I can't see why this isn't working

chrome dev tools

Any help would be greatly appreciate it!

I've tried sending a basic response (i.e. a string instead of object), changing the endpoint, and more all to no avail

AntarniP
  • 23
  • 4

2 Answers2

1

It seems like you are passing the id as a query param and not as part of the path

const endpoint = `${serverIp}/user/update/?id=${id}`;
                                          ^
Acapulco
  • 3,373
  • 8
  • 38
  • 51
0

What I can see from first glance is that in server-side you are using request parameter for id, but in the client you're sending id as a request query

Aminaaa
  • 1
  • 1