2017-09-22 100 views
0

我特林通过Ajax表单数据发送到节点JS,
我使用快递与身体解析器节点JS
但我正在逐渐未定义的REQ。身体阿贾克斯后的数据发送给快递JS身体解析器

我搜索了每一个网络,并尝试了很多东西,没有为我工作 请帮助我正确的方式做到这一点。

| * | HTML代码:

<html lang="en"> 
<head> 
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script> 
    <title>Add</title> 
</head> 
<body> 

    <h1>Welcome to Website </h1> 
    <form id="addUserForm"> 
     <h3> Enter the your details : </h3> 
     Name :<br><input type="text" name="nameView"><br><br> 
     Email :<br><input type="email" name="mailView"><br><br> 
     Mobile :<br><input type="number" name="mobileView"><br><br> 
     <input type="submit" value="Submit"> 
    </form> 

| * | Ajax代码:

<script> 
     $(document).ready(function() 
     { 
      $('#addUserForm').submit(function() 
      { 
       var formDataVar = new FormData($(this)[0]); 

       console.log(formDataVar); 
       $.ajax({ 
        url: '/addUserFormSubmit', 
        type:'POST', 
        data: formDataVar, 
        dataType: 'json', 
        contentType: false, 
        processData: false, 
       }).done(function(ResJryVar) 
       { 
        console.log(ResJryVar); 
       }); 
      }) 
     }); 

    </script> 
</body> 

</html> 

| * |我也试过:

var formDataVar = new FormData(); 
formDataVar.append('nameView', input.files[0]); 
formDataVar.append('mailView', input.files[1]); 
formDataVar.append('mobileView', input.files[2]); 

var formDataVar = {}; 
$.each($('#addUserForm').serializeArray(), function(i, field) 
{ 
    formDataVar[field.name] = field.value; 
}); 

| * |节点JS代码:

var express = require("express"); 
var bodyParser = require("body-parser"); 
var app = express(); 

app.listen(8888,function() 
{ 
    console.log("Server Started and Running ..."); 
}); 

app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({extended: true})); 

app.get('/',addUserFormFnc); 
app.post('/addUserFormSubmit',addUserSubmitFnc); 

function addUserFormFnc(req, res) 
{ 
    res.sendFile('addUser.html', {root: __dirname }); 
} 

function addUserSubmitFnc(req, res) 
{ 
    console.log("Data Received : "); 
    var userObjVar = 
    { 
     nameView: req.body.nameView, 
     mailView: req.body.mailView, 
     mobileView: req.body.mobileView 
    }; 
    console.log(userObjVar); 
    res.send(userObjVar); 

} 

+0

如果你有url编码数据,它应该在req.body上可用,而不是req.data。对于多部分/表单数据,请查看Muller中间件包。 – djfdev

+0

抱歉编辑我的问题。它的要求。我只是使用表单。 action ='/ addUserFormSubmit'的作品。但是当我从阿贾克斯发送,它不会工作 –

回答

1

身体解析器库没有处理好与multipart/form-data编码数据。如果你想发送这种类型的数据,你应该使用类似multer中间件。

但在你的情况下,我认为你可以逃脱,而不必使用FormData接口。你可以重写你的浏览器代码,如下:

const $form = $('#addUserForm') 

$form.on('submit', submitHandler) 

function submitHandler (e) { 
    e.preventDefault() 

    $.ajax({ 
    url: '/addUserFormSubmit', 
    type:'POST', 
    data: $form.serialize() 
    }).done(response => { 
    console.log(response) 
    }) 
} 
+0

你可以给一个解释如何使用multer只有领域。该文档仅解释有关文件。 –

+1

下面是一个完整的工作示例https://gist.github.com/djfdev/750f2255e2f6f72b2ca5e0636f13d990 – djfdev

+0

根据multer文档,任何文本字段都将作为'req.body'的属性提供。但是,除非你发送文件,否则你不需要使用这个库。 – djfdev