Actually i am updating an array in my api and after updating the array i am only getting the mongodb default id. It seems that the req.body.something is not defined although the req.body is defined. And i am using all middlewares properly like body-parser
This is the server.js
code
/* eslint-disable no-unused-vars */
/* eslint-disable no-undef */
const mongoose = require('mongoose')
const express = require('express')
const cors = require('cors')
// const bodyParser = require('body-parser')
const userRouters = require('./routes/user.js')
const podcastRouter = require('./routes/pocasts.js')
// const methodOverride = require('method-override')
const port = 8080
const app = express()
// app.use(bodyParser.json())
app.use(express.json())
app.use(express.urlencoded({extended: true}));
// app.use(express.methodOverride());
app.use(cors({
credentials: true,
}))
//routes
app.use('/',userRouters)
app.use('/api/podcasts' , podcastRouter)
app.post('/api/podcasts',(req,res)=>{
res.send("This is the api page")
})
app.post('/login',(req,res)=>{
res.send("This is the login page")
})
app.post('/signup',(req,res)=>{
res.send("This is the signup page")
res.json(req.body)
})
const DB = "mongodb+srv://fk28:farhankhan123@cluster0.fq2ibrs.mongodb.net/test"
mongoose.connect(DB , {
useNewUrlParser:true,
useUnifiedTopology:true
}).then(()=>{
console.log("connection successful")
}).catch((err)=>{
console.log(err)
})
app.listen(port , ()=>{
console.log("listening to port",port)
})
You can see that i have used bodyparser and other middleware. And also placed them before routers.
This is the update
code
const Update =async (req,res)=>{
const _id = req.params.id
// const { ...data } = req.body
const bodycontent = req.body
try{
const UpdatedPodcast = await Podcasts.updateOne({
_id
},
{
$push:{
Episodes:[{
EpisodeNo:bodycontent.EpisodeNo,
EpisodeName:bodycontent.EpisodeName,
EpisodeDescription:bodycontent.EpisodeDescription
}]
}
},
{
upsert:true,
new:true
}
)
console.log(req.body.EpisodeNo,req.body.EpisodeName,req.body.EpisodeDescription)
console.log(req.body)
res.send(UpdatedPodcast)
}catch(err){
res.status(500).json({
message:"Error in updating the data"
})
}
}
Here i am consolling the req.body and also req.body.something
This is the consolled output
undefined undefined undefined
{
Episodes: {
EpisodeNo: 3,
EpisodeName: 'All About Cooking',
EpisodeDescription: 'Cooking is fun'
}
}
This the api output
{
"_id": "646e2cc2040b492346842b34"
},
I am using Postman to make request
This is the POSTMAN request
{
"Episodes":
{
"EpisodeNo": 3,
"EpisodeName": "All About Cooking",
"EpisodeDescription": "Cooking is fun"
}
}
I have used all middlewares but then also getting req.body.something as undefined. I am expecting where i am only getting default mongodb id i , i should get the updated data too.
Your EpisodeNo, EpisodeName, EpisodeDescription is a nested object properties, because you pass in nested JSON in the request.
So get the value like this instead:
const {EpisodeNo, EpisodeName, EpisodeDescription} = req.body.Episodes
Or you can pass in each property without nested.
{ "EpisodeNo": 3, "EpisodeName": "All About Cooking", "EpisodeDescription": "Cooking is fun" }