Express - 如何获取序列化表单

时间:2017-11-18 16:15:12

标签: javascript jquery node.js express

我正在尝试使用serialize提交表单,但在表达中我无法获取数据。

jquery的:

    function submitSettingsCustom()
   {
     $('#reception-source-custom-form, expedition-source-custom-form').on("submit", function(event)
     {
       alert("works");
       event.preventDefault();
       var form = $(this).serialize();
       $.post("/add-reception-source-customField/"+ JSON.stringify(form), function(data){

       });
     });
   }

路线:

routes.post('/add-reception-source-customField/:form', settings.storeCustomField);

在表达中我试图console.log数组:

console.log(req.params.form);

返回:

"name=Emp1&type=submitReceptionSourceCustomFields"

但是如何访问每个值?

谢谢

2 个答案:

答案 0 :(得分:2)

您应该在帖子请求中将您的表单数据添加为正文,而不是在url

同样serialize将导致urlEncoded数据,而serializeArray将导致对象数组。

   function submitSettingsCustom()
   {
     $('#reception-source-custom-form, expedition-source-custom-form').on("submit", function(event)
     {
       alert("works");
       event.preventDefault();
       var form = $(this).serializeArray();
       $.post("/add-reception-source-customField/" , { formData : JSON.stringify(form)}, function(data){

       });
     });
   }

然后在表达中使用req.body.formData

访问数据
routes.post('/add-reception-source-customField/', function(req , res){
   console.log(req.body.formData);
});

答案 1 :(得分:0)

对于HTTP POST请求,表单数据应该在请求正文中而不是URL中提交。

使用jQuery,可以通过将序列化表单数据作为第二个参数传递给$.post()来完成。

$.post('/reception-source', $(this).serialize(), function (data) {
  /* lines of code */
})

在Express中,您需要由Expressjs团队维护的body-parser middleware。此中间件将使表单数据在req.body ...

上可用
const express = require('express')
const bodyParser = require('body-parser')

const app = express()
app.use(bodyParser.urlencoded({ extended: true })

app.post('/reception-source', function (req, res) {
    console.log(req.body)
    /* lines of code */
})