为什么我的快递POST在req.body中显示空白?的NodeJS

时间:2017-05-09 00:53:55

标签: javascript node.js ajax express post

我已检查我的data是否已正确传递,db已连接,但是,使用ajax它会让我成功回拨并返回ID。

但不知怎的,我的数据没有通过,当我尝试reqreq.body时,我发现body是空白的{}

我在html中将此作为我的表单

                <form>
                    <label for="">Name</label>
                    <input class="form-control" type="text" placeholder="Your Name" name="name">
                    <label for="">Email</label>
                    <input class="form-control" type="text" placeholder="example@hackhub.com" name="email">
                    <label for="">Subject</label>
                    <input class="form-control" type="text" placeholder="Subject" name="subject">
                    <label for="">Message</label>
                    <textarea class="form-control" placeholder="Message" id="" cols="30" rows="5" name="body"></textarea>
                    <input class="contact-btn" type="submit">
                </form>

至于我的ajax电话

    $('.contact-btn').on('click', function (e) {
        e.preventDefault();
        var data = {
            'name': $('input[name="name"]').val(),
            'email': $('input[name="email"]').val(),
            'subject': $('input[name="subject"]').val(),
            'body': $('textarea[name="body"]').val()
        }

        console.log(data);

        $.ajax({
            method : "POST",
            url: '/contact/test',
            dataType: "json",
            data: {'name': 'testingaodk'}, // I added this to give it a direct test ( I was using data:data
            success: function (data) {
                console.log(data);
            },
            error: function (err) {
                console.log(err);
            }
        })
    })

在我的快递中

var express = require('express');
var app = express();
var path = require('path');
var mongoose = require('mongoose');
var cors = require('cors');
var bodyParser = require('body-parser');
mongoose.Promise = global.Promise;
mongoose.connect('mongodb://');
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'MongoDB connection error:'));

app.use(bodyParser.json());

app.post('/contact/test', function (req, res) {
    var newContact = new Contact(req.body);
    console.log(req);
    newContact.save(function (err, doc) {
        res.send(doc);
    });
});

在我的console.log中,我确实看到data已成功传回,并传回了随机id

此外,在快速控制台中,我可以看到类似这样的内容

locals: {} },
body: {},
route:
    Route {
    path: '/contact/test',
        stack: [ [Object] ],
        methods: { post: true } } }

意思是身体是空的,但为什么呢?

有人可以帮我一把吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

您的代码只显示您使用bodyParser.json(),但表单提交不是JSON,而是application/x-www-form-urlencoded因此,您必须使用这样的内容,以便将提交的表单正确解析为{{ 1}}:

req.body

您可以决定要将哪些选项与中间件一起使用。 Doc是here