skip to Main Content

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

2

Answers


  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}`;
                                              ^
    
    Login or Signup to reply.
  2. 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

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search