David
David

Reputation: 87

POST http://localhost:3000/updateSurvey 400 (Bad Request)

I am trying to update a collection in mongoDB after the user finishes some tasks. However, whenever I attempt to save the information and update mongo, I'm getting the error POST http://localhost:3000/updateSurvey/634124db6f 400 (Bad Request). Any ideas why my code isn't functioning correctly?

Backend js script

app.post('/updateSurvey', async (req, res) => {
try {
    await client.connect();
    var db = client.db('Admin_Db');
    var collection = db.collection('Survey');

    await collection.findOneAndUpdate({"_id": ObjectId(req.body.id)}, {completion: req.body.completion});
    res.send("updated");
} catch (error) {
    console.log(error);
    res.status(400).send(error);
}
});

Main.js (this is how I am fetching the data from mongo)

fetch("http://localhost:3000/updateSurvey", {
method:'POST', 
headers:{'Content-Type': 'application/json'}, 
body: JSON.stringify({id: surveyID, completion: true})})
.then(response=>{response.text()})
.catch(function(err){console.log("Fetch Problem: " + err)});

Upvotes: 1

Views: 1164

Answers (1)

Tom Bombadil
Tom Bombadil

Reputation: 3975

You don't have a route http://localhost:3000/updateSurvey/634124db6f exposed on your server. Therefore the 404 error. Since you are using a post call, just pass the surveyID in your body when making the post call using fetchAPI instead of sending it as a query param.

And make sure http://localhost:3000/updateSurvey is the route to which your are sending your data, without the surveyId in the URL.

Edit

Edits made as per request received in comments.

collection.findOneAndUpdate({"_id": id)}, {completion: req.body.completion});

should be:

collection.findOneAndUpdate({"_id": new ObjectId(id))}, {completion: req.body.completion});

_id is of type ObjectId in MongoDB. You are passing id as string. This should most likely be the error from what I can gather by the code shared in your question. You can cast a string to ObjectId by using the ObjectId class provided by the Mongo Driver for node. Even mongoose provides this class.

Upvotes: 1

Related Questions