首页 > 解决方案 > 通过节点js中的html表单在post fumction中传递req数据时遇到问题

问题描述

我是nodejs的新手。通过 html 表单发布数据时面临问题....在我的 server.js 中,我添加了这个发布功能请求

app.get('/',(req,res)=>{
  res.end(`
  <!doctype html>
  <html>
  <body>
  <form action="/product" method="post" role="form" enctype="multipart/form-data"> 

  <input type="text" id="title" name="title" placeholder="title"> 

  <input type="number" name="price"  placeholder="price"> 
    
  <input type="text" name="description" placeholder="description"> 

  <input type="text" name="category" placeholder="category" > 

  
  <input type="file" name="product" >

  <button>Save</button>
</form> 
  </body>
  </html>
`);
})

在 product.js 中发布函数声明

const productRouter = express.Router();
productRouter.use(bodyParser.json());

productRouter.route('/')
.get((req,res,next)=>{
    Product.find({})
    .then((products)=>{
        res.statusCode=200;
        res.setHeader('Content-Type','application/json');
        res.json(products);
    },(err)=>next(err))
    .catch((err) => next (err));
})
.post((req,res,next)=>{
    console.log(req.body);
    var Prod= new Product({
        title:req.body.title,
        price:req.body.price ,
          description: req.body.description,
          category:req.body.category,
          img: req.body.img
    });
    Prod.save()
    .then((product)=>{
        console.log('product added ',product );
         res.statusCode=200;
         res.setHeader('Content-Type','application/json');
         res.json(product);
        
    },(err)=> next(err))
     .catch((err) => next(err));
})

当我使用 POSTMAN 时,发布请求工作正常,但是当尝试使用 html 表单时,我面临以下错误:

ValidationError:产品验证失败:标题:title需要路径。,价格:price需要路径。,描述:description需要路径。,类别:category需要路径。,img:img需要路径。在 model.Document.invalidate (C:\Users\mayank\Desktop\cata\node_modules\mongoose\lib\document.js:2598:32)

标签: javascripthtmlnode.js

解决方案


检查 body-parser README 部分的注释(附上截图供参考)。由于其复杂性,BodyParser 不支持多部分样式。相反,列出了一些要使用的 nm 模块。

我建议MULTERMILTIPARTY

这是正在运行的代码的参考。我已将接收到的有效负载作为 JSON 响应发送。您可以继续按照您的意愿处理方式。

router.post('/ola', (req, res) => {
  var form = new multiparty.Form();
  form.parse(req, function(err, fields, files) {
    res.json({ fields: fields, files: files });
  });
  
})

在此处输入图像描述


推荐阅读