我遇到了这个奇怪的问题,我有两个用react构建的表单,一个用于注册,另一个用于登录。 我正在做一个ajax请求将注册表单的内容传递给快速服务器,正文被解析,我从req.body获取内容没有任何问题, 但是,当我为登录表单执行相同的操作时,我的后端服务器不会收到电子邮件和密码等内容,但如果使用邮递员完成,则工作正常, 下面是使用ajax from react
进行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”而没有在检查时点击登录策略我发现身体是空白的,这里没有收到任何内容,但是如果我请求与邮递员完全相同的路线,则认证过程非常有效这里出了什么问题。 请记住,我已经使用快速服务器配置了正确解析的主体,因此它适用于注册但不适用于登录。
答案 0 :(得分:0)
你有三个问题:
您传递jQuery 对象而不是JSON字符串。它将使用标准格式编码方法对其进行编码。
删除您使用JSON的声明:
contentType:"application/json",
或使用JSON.stringify
将对象转换为JSON。
您选择的将取决于您的服务器端正文解析器设置。
datatype:"jsonp",
JavaScript区分大小写。 dataType
属性中间有一个大写T
。
dataType: "json"
...但这取决于服务器端代码的响应类型。
Data: userdata,
同样,JavaScript区分大小写。该属性称为data
,而不是Data
。
答案 1 :(得分:-1)
叹息,问题在于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请求区分大小写。