【问题标题】:Express js 4, Parse.com JSON errorExpress js 4,Parse.com JSON 错误
【发布时间】:2015-08-24 10:45:12
【问题描述】:

我正在尝试向 Parse.com 上托管的 Express JS 服务器发送 POST 调用。我这样发送数据:

var data = new Array();     
    data["firstName"] = firstName;
    data["lastName"] = lastName;
    data["dateOfBirth"] = dateOfBirth;
    data["mobileNumbe"] = mobileNumber;
    data["email"] = email;
    data["reEmail"] = reEmail;
    data["pw"] = pw;
    data["rePw"] = rePw;

    $.ajax({
            url: "/api/post/registerclient",
            type: "POST",
            dataType: "application/json",
            data: { data:data
                  },
            success: function(result){
                disabledButton("buttonRegister",false);
                if(data.success == true){
                    console.log("Neu registriert");
                }else{
                    showErrorMessageWithError(result.error);
                }
            },
            error:function(error){
                disabledButton("buttonRegister",false);

                var string = "Es ist ein Fehler aufgetreten!"
                showErrorMessageWithError(string);
            }
        });

在服务器端,我尝试用 req.body.data 捕获数据,但它是空的:

exports.registerClient = function(req,res){

//Data, get = firstName, lastName, dateOfBirth, mobileNumber, email, reEmail, pw, rePw
//Data, respond = success, error
var validation = helper.validateRegisterClient(req.body.data);


if(validation.length == 0){
    var user = new Parse.User();
    user.set("username", req.data.email);
    user.set("password", req.data.pw);
    user.set("email", req.data.email);

    //optional fields
    user.set("mobileNumber", req.data.mobileNumber);
    user.set("firstName", req.data.firstName);
    user.set("lastName", req.data.lastName);
    user.set("dateOfBirth", req.data.dateOfBirth);

    user.signUp(null, {
        success: function(user) {
            // Hooray! Let them use the app now.
            var success = true;
            var error = "";

            var json = {success: success, error: error};
            res.json(json);
        },
        error: function(user, error) {
            var success = false;

            var json = {success: success, error: error};
            res.json(json);
        }
    });
}else{
    var success = false;
    var error = validation;

    var json = {sucess: success, error: error};
    res.json(json);
}
}

我感觉我的 express 应用可能配置错误,所以这里是我的“init”:

var express = require('express');
var parseExpressHttpsRedirect = require('parse-express-https-redirect');
var parseExpressCookieSession = require('parse-express-cookie-session');
var app = express();

// Global app configuration section
app.set('views', 'cloud/views');  // Specify the folder to find templates
app.set('view engine', 'ejs');    // Set the template engine
app.use(parseExpressHttpsRedirect());
app.use(express.bodyParser());    // Middleware for reading request body
app.use(express.cookieParser('xxxxxxxxxxxxxxxxxxxx'));
app.use(parseExpressCookieSession({ cookie: { maxAge: 3600000 } }));

【问题讨论】:

  • 使用var data = {}; 而不是var data = new Array();

标签: javascript jquery node.js express parse-platform


【解决方案1】:

您的快速代码中有错字。你在引用 req.data 时应该是 req.body.data

例如,这个:

var user = new Parse.User();
user.set("username", req.data.email);
user.set("password", req.data.pw);
user.set("email", req.data.email);

应该是这样的:

var user = new Parse.User();
user.set("username", req.body.data.email);
user.set("password", req.body.data.pw);
user.set("email", req.body.data.email);

此外,您的初始数据数组实际上是一个对象,应该以不同的方式实例化。所以这个:

var data = new Array();

应该是这样的:

var data = {};

我刚才注意到的另一件事是您在 ajax 成功回调中引用了 data.successdata.success 在此范围内不存在。这应该是result.success

所以这个:

            if(data.success == true){
                console.log("Neu registriert");
            }else{
                showErrorMessageWithError(result.error);
            }

应该是:

            if(result.success == true){
                console.log("Neu registriert");
            }else{
                showErrorMessageWithError(result.error);
            }

【讨论】:

  • 感谢指出错误,但问题是 req.body.data 为空:/
  • 那是因为你正在用new Array() 实例化var data。它应该是var data = {} 而不是var data = new Array()。我刚刚自己在 Node 中对此进行了测试,当您使用 Array() 时,数据并没有按照您所期望的方式进行转换。编辑:在更新 var data = {} 后尝试 console.logging req.body.data 并报告你得到了什么。
  • 我应用了所有更改,保存了文件。从服务器上删除所有文件,然后重新上传。现在它工作了!非常感谢!
  • 现在在服务器端一切正常后,我想我得到了一个跨域错误,因为 Ajax 调用总是失败,即使成功也是如此。我应该打开一个新线程吗?
  • 是的,请这样做。这是一个根本不同的问题
猜你喜欢
  • 2014-07-22
  • 2019-01-03
  • 1970-01-01
  • 1970-01-01
  • 2015-06-20
  • 2019-10-22
  • 2012-05-24
  • 1970-01-01
  • 2011-11-11
相关资源
最近更新 更多