1

I am trying to get data from user and then adding it to my database. But whenever i send a post request through form and try to print data in the request body it says "undefined".

I tried finding answer online but it didn't help. The error could be silly but an anyone tell me what it could be?

<form action="/products" method="POST">
  <legend for="name">Name</legend>
  <input type="text" name="name" id="name" placeholder="Enter Product Name" required><br><br>
  <legend for="price">Price</legend>
  <input type="text" name="price" id="price" placeholder="Enter Product Price" required><br><br>
  <legend for="img">Image</legend>
  <input type="text" name="img" id="img" placeholder="Enter Product Image URL"><br><br>
  <legend for="img">Description</legend>
  <textarea name="desc" id="desc" placeholder="Enter Product Description" rows="5" cols="50"></textarea><br><br>
  <button type="submit">Submit</button>
</form>`enter code here`

This is the main app file

const express=require("express");
const app=express();
const mongoose=require("mongoose");
const path=require("path");
const routes=require("./routes/ec-routes");
const seed=require("./seed");

app.use(express.json())
app.set("view engine","ejs");
app.set("views",path.join(__dirname,"views"));
mongoose.connect("mongodb://localhost:27017/e-commerce")
.then(()=>console.log("DB Connected"))
.catch((err)=>console.log(err));
app.use(express.static(path.join(__dirname,"public")));
app.use(routes);
app.use(express.urlencoded({extended:false}));

//seed();
app.get("/",(req,res)=>{
    res.send("Home page");
});


app.listen(3000,(req,res)=>{
    console.log("Up At 3000")
})

This is routes file

const express=require("express");
const router=express.Router();
const Product=require("../models/product");


router.get("/products",async (req,res)=>{
    const products=await Product.find({});
    res.render("products/home",{products});
})
router.get("/products/new",(req,res)=>{
    res.render("products/new");
})
router.post("/products",async (req,res)=>{
    const product={
        ...req.body
    }
    console.log(req.body)
    
    res.redirect("/products");
})


module.exports=router;

1 Answers1

0

you need to use express.urlencoded({extended:false}) middleware before you hit the router, so that the body which is sent by html post method will be attached under req.body object

in your case

app.use(routes);
app.use(express.urlencoded({extended:false}));

it should be like this

app.use(express.urlencoded({extended:false}));
app.use(routes);