我试图使用AJAX通过表单发送一些值(数据)但是req.body总是空的或值未定义

时间:2016-06-16 08:21:39

标签: javascript ajax node.js ejs

我正在尝试使用AJAX通过表单发送一些值(数据),但是req.body总是空的或值未定义。

app.post('/add', urlencodedParser, function(req, res) {  
    console.log(req.body.email1);
    console.log(req.body.name1);
    console.log(req.body);
    //res.render(req.body.message);
    res.redirect('/todo');
});

3 个答案:

答案 0 :(得分:2)

尝试使用json解析器而不是urlencoded解析器。

var bodyParser = require('body-parser');

app.post('/add', bodyParser.json(), function (req, res) {
    console.log(req.body.email1);
    console.log(req.body.name1);
    console.log(req.body);
    //res.render(req.body.message);
    res.redirect('/todo');
});

您可能会通过JSON调用发送AJAX数据,这就是urlencoded解析器无法解析正文的原因。更多信息:https://www.quora.com/What-exactly-does-body-parser-do-with-express-js-and-why-do-I-need-it

<强>更新

当您将帖子数据发送为multipart/form-data时,您需要multer来解析node.js

var multer = require('multer')
var upload = multer();

app.post('/add', upload.array(), function (req, res) {
    console.log(req.body);
});

答案 1 :(得分:1)

使用req.body

的req.param('email1')

答案 2 :(得分:0)

//在客户端...

<script>
        $(document.forms['formName']).on('submit', function(){
            var form = $(this);
            $.ajax({
                url: "/add",
                method: "POST",
                data: form.serialize(),
                statusCode: {
                    200: function(){
                        window.location.href = "/todo"
                    },
                    400: function(jqXHR){
                       //display errors
                    }
                }
            });
            return false;
        });
    </script>

//并在服务器端

app.post('/add', function (req, res, next) {
    console.log(req.body.email1);
    console.log(req.body.name1);
    console.log(req.body);
    res.status(200);
});

只需连接所需的一切

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

希望这能帮到你

如果需要,可以使用表单视图

<form name = "formName">
    <fieldset class="form-group">
        <label for="email1">Enter email</label>
        <input type="text" class="form-control" name = "email1" id="email1" placeholder = "Enter email">
    </fieldset>

    <fieldset class="form-group">
        <label for="name1">Enter name</label>
        <input type="text" class="form-control" name="name1" id="name1" placeholder="Enter name">
    </fieldset>

    <button type="submit" class="btn btn-primary">Send</button>
</form>