帖子请求正文为空

Posted

技术标签:

【中文标题】帖子请求正文为空【英文标题】:Body of post request is empty 【发布时间】:2020-06-06 14:09:09 【问题描述】:

由于某种原因,我对 mongodb 数据库的 jquery 发布请求的正文始终为空。我已经在终端上的 insomnia 和 python 等其他应用程序上尝试了相同的发布请求。

但是,这个与快递服务器同目录的html脚本无法发送post请求

代码:

$("form").submit(function (event) 

            //getting the form data
            var input_values = $(this).serializeArray();
            var post_JSON = ;
            $.each(input_values, function (i, field) 
                post_JSON[field.name] = field.value;
            );
            console.log(JSON.stringify(post_JSON));

            //Post request to mongo db
            $.post("http://localhost:5000/users/add",                   // url
                JSON.stringify(post_JSON),                              // data to be submit

                function (data, status, jqXHR)                         // success callback
                    console.log('status: ' + status + ', data: ' + data);
                ,

                "json")
                .fail(function (xhr, status, error) 
                    console.log(xhr);
                );

使用猫鼬模式定义的用户模式:

var UserSchema = new Schema(
    username: 
        type: String,
        required: true,
        trim: true,
    ,
    password: 
        type: String,
        required: true,
    ,
    favourites: [String],
    profile_img: Buffer,
    email: 
        type: String,
        match: /.+@.+/i, //Validates email ids
        unique: true,
        required: true,
    ,
    search_history: [String],
    phone_number: 
        type: String,
        maxlength: 10,
        match: /^\d10$/,  //Validates phone number
    ,
);

const User = mongoose.model('User', UserSchema);

module.exports = User;

这是控制台错误日志:

错误发布请求错误之前的 json 是我尝试发送到数据库的实际数据。如果我要复制粘贴此 json 并在失眠中尝试该帖子,它会起作用。但我需要它在这里工作。

【问题讨论】:

当您使用 AJAX 时,您是否使用过 preventDefault() 来阻止 submit 事件实际重定向页面? 另外,您能否详细说明之前的fn of undefined 错误?您在请求正文中的服务器中看到了什么? 您是否在服务器上设置了body-parser 【参考方案1】:

您需要将Content-type 标头设置为application/json 以指示您的数据类型。由于Jquery.ajax 使这更容易,我建议你改用这个:

$.ajax
(
    url: 'http://localhost:5000/users/add',
    type: 'post',
    data: post_JSON,
    contentType: 'application/json',
    dataType: 'json',
    success: function (data, status, jqXHR) 
        console.log('status: ' + status + ', data: ' + data);
    ,
    error: function (xhr, status, error) 
        console.log(xhr);
    
);

【讨论】:

好,但是你需要对 JSON 数据进行字符串化吗?【参考方案2】:

您不需要在data: JSON.stringify(post_JSON) 中使用字符串化。只需发送对象,jQuery 会处理其余的事情。

【讨论】:

我也尝试了一个 json 对象,但得到了相同的结果

以上是关于帖子请求正文为空的主要内容,如果未能解决你的问题,请参考以下文章

AJAX 请求正文为空(无 jQuery)

打字稿:将帖子请求正文转换为地图

在进行改造 2 发布请求时,响应正文为空

yaml格式作为请求帖子正文

Axios DELETE 请求正文被发送为空

响应正文为空(获取请求)[重复]