【问题标题】:why my ajax request doesn't send the content in the req.body?为什么我的 ajax 请求没有发送 req.body 中的内容?
【发布时间】:2018-02-18 08:04:45
【问题描述】:

我遇到了这个奇怪的问题,我有两个用 react 构建的表单,一个用于注册,另一个用于登录。 我正在发出一个 ajax 请求,将注册表单的内容传递给快速服务器,正文被解析,我从 req.body 获取内容没有任何问题, 但是,当我为登录表单做同样的事情时,我的后端服务器没有收到电子邮件和密码之类的内容,但是如果使用邮递员完成它就可以正常工作, 下面是从 react 使用 ajax 进行 api 调用的给定代码

  login: function (e) {
    e.preventDefault();
    console.log(this.refs.loginpassword.value);
    var userdata = {
        "email": this.refs.loginusername.value,
        "password": this.refs.loginpassword.value
    }
    console.log(userdata);
    $.ajax({
        type: "POST",
        contentType:"application/json",
        datatype:"jsonp",
        Data: userdata,
        url: "http://localhost:5000/signin",
        success: function (data) {
            console.log(data);
        },
        error: function (err) {
            console.log(err);
        }
    })
},

如果我将用户数据记录到控制台,我可以看到字段已填充但后端未收到它们,以下是后端快速服务器上编写的代码

   app.post('/signin', function(req,res,next){
    console.log(req.body);

    passport.authenticate('local-login',{
    successRedirect:'/profile',
    failureRedirect:'/failureredirect',
    failureFlash:true
})(req,res,next)}

这会重定向到路由“/failureredirect”而没有点击登录策略检查后我发现正文是空白的,这里没有收到任何内容,但是如果我向邮递员请求相同的路由,则身份验证过程运行良好,这里出了什么问题。 请记住,我已经配置了使用 express 服务器很好地解析的正文,因此它适用于注册但不适用于登录。

【问题讨论】:

标签: node.js ajax reactjs authentication passport.js


【解决方案1】:

你有三个问题:

您正在向 jQuery 传递一个 object 而不是 JSON 字符串。它将使用标准格式编码方法对其进行编码。

要么删除您正在使用 JSON 的声明:

   contentType:"application/json",

或使用JSON.stringify 将对象转换为 JSON。

您选择哪一个取决于您的服务器端正文解析器设置。


   datatype:"jsonp",

JavaScript 区分大小写。 dataType 属性的中间有一个大写字母 T

然而,JSONP 与 POST 请求不兼容。这应该可能是:

dataType: "json"

……但这取决于您的服务器端代码做出什么样的响应。


   Data: userdata,

同样,JavaScript 是区分大小写的。该属性称为data,而不是Data

【讨论】:

  • 感谢您的深入了解,我已经解决了。我如何从我的快递服务器遇到与 CORS 相关的其他问题,我想重定向到另一个域,从该域发起请求。我已经为服务器配置了 cors 权限,但它无法重定向到路由,说请求的资源上没有访问控制允许源头。
【解决方案2】:

唉,问题出在 ajax 请求中,在 ajax 请求中,关键数据被写为 Data 导致它不起作用,

$.ajax({
        url: "http://127.0.0.1:5000/login",
        type: "POST",
        datatype:"JSON",
        Data: userdata,

        success: function (data) {
            console.log(data);
        },
        error: function (err) {
            console.log(err);
        }
    })

将 Data:userdata 更改为 data:userdata 即可。 ajax 请求区分大小写。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-01
    • 1970-01-01
    • 2021-11-16
    • 2020-01-07
    • 2012-08-25
    • 2012-06-01
    • 1970-01-01
    相关资源
    最近更新 更多