【问题标题】:The form is not sending data in the post request?表单没有在 post 请求中发送数据?
【发布时间】:2022-11-19 14:32:03
【问题描述】:

我正在尝试从用户那里获取数据,然后将其添加到我的数据库中。但是每当我通过表单发送发布请求并尝试在请求正文中打印数据时,它都会显示“未定义”。

我尝试在网上寻找答案,但没有帮助。这个错误可能很愚蠢,但有人告诉我它可能是什么吗?

<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`

这是主要的应用程序文件

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")
})

这是路由文件

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;

【问题讨论】:

  • 你使用什么后端?这与后端有关。如果使用 node js 和 express,请检查是否配置了 body-parser
  • 同意,HTML 看起来不错,这是后端问题。
  • 请包括您的后端代码。什么是/products
  • 你发布的for本身应该不是问题。您需要将错误处理添加到您的server process
  • @PierreJanineh 先生,感谢您的回复,我更新了相关文件。

标签: javascript html css ejs


【解决方案1】:

你需要使用 express.urlencoded({extended:false}) 中间件 在你点击路由器之前, 这样通过 html post 方法发送的正文将附加在 req.body 对象下

在你的情况下

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

应该是这样的

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

【讨论】:

    猜你喜欢
    • 2019-02-25
    • 2020-06-05
    • 2021-05-07
    • 1970-01-01
    • 2012-06-02
    • 1970-01-01
    • 2015-09-26
    • 1970-01-01
    相关资源
    最近更新 更多