【问题标题】:Uncaught You must specify a key using Parse.initialize未捕获您必须使用 Parse.initialize 指定一个键
【发布时间】:2015-09-25 09:26:40
【问题描述】:

我已经使用 Parse 大约三个月了,但已经开始使用一个新应用程序。我正在使用 Parse 1.4.2 js sdk。

我在一个单独的文件中有一些代码正在向数据库发出请求。该文件包含在 main.js 文件中。

当我尝试部署(使用 1.4.2 sdk)时出现错误:

Uploading source files
Uploading recent changes to scripts...
The following files will be uploaded:
/Users/aaron/dev/Familiar/cloud/main.js
/Users/aaron/dev/Familiar/cloud/user.js
/Users/aaron/dev/Familiar/cloud/verification.js
Finished uploading files
Uncaught You must specify a key using Parse.initialize.

如果我尝试使用最新的 sdk 进行部署,则会收到错误消息:

Uploading source files
Uploading recent changes to scripts...
The following files will be uploaded:
/Users/aaron/dev/Familiar/cloud/verification.js
Finished uploading files
TypeError: Object #<Object> has no method 'request'
    at Object.ajaxMod [as ajax] (<anonymous>:925:19)
    at e.<anonymous> (Parse.js:13:25717)
    at e.s (Parse.js:12:26759)
    at Parse.js:12:27145
    at i (Parse.js:12:27100)
    at e.n.value (Parse.js:12:27130)
    at Object.y.request (Parse.js:13:25644)
    at Object.u.default.setQueryController.find (Parse.js:13:6132)
    at e.a.value (Parse.js:13:76)
    at e.<anonymous> (verification.js:18:38)

如果我注释掉所有verification.js,它将上传,但如果没有注释,我会收到错误消息。我的另一个工作应用程序从不调用Parse.initialize。为什么现在要它?

目录结构:

├── cloud
│   ├── comment.js
│   ├── lib
│   │   ├── config.js
│   │   ├── helpers.js
│   │   └── md5.js
│   ├── main.js
│   ├── user.js
│   └── verification.js
├── config
│   └── global.json
└── public
    └── index.html

ma​​in.js

require("cloud/user.js");
require("cloud/comment.js");
require("cloud/verification.js");

verification.js

var conf = require("cloud/lib/config.js").conf;
var helpers = require("cloud/lib/helpers.js");

function createSmsVerification(user) {
    return getUserSmsVerification(user)
        .then(function (verification) {
            var verificationQuery = new Parse.Query("Verification");
            return verificationQuery.first(); <-- this is the line causing the error
        })
        .then(function (verification) {
            return verification;
        }, function (error) {
            return Parse.Promise.error("createSmsVerification - " + error.message);
        });
}
exports.createSmsVerification = createSmsVerification();

function getUserSmsVerification(user) {
    return Parse.Promise.as();
}

user.js

var helpers         = require("cloud/lib/helpers.js"),
    conf            = require("cloud/lib/config.js").conf,
    sms             = require("cloud/sms.js"),
    verification    = require("cloud/verification.js");


Parse.Cloud.define("register", function(request, response){
    Parse.Cloud.useMasterKey();
    var phoneNumber = request.params.phoneNumber;
    var user;
    var userQuery = new Parse.Query(Parse.User);
    userQuery.equalTo("username", phoneNumber);

    return userQuery
        .first(function(userResult){
            if(!helpers.isDefined(userResult)){
                userResult = createNewUser(phoneNumber);
            }else{
                userResult.set("smsVerified", false);
            }
            return userResult.save();
        })
        .then(function(userResult){
            user = userResult;
            return verification.createSmsVerification(user);
        })
        .then(function(){
            response.success();
        }, function (error){
            console.error("register - " + error.message);
            response.error(error.message);
        });
});

function createNewUser(phoneNumber){
    var newUser = new Parse.User();
    newUser.set("username", helpers.phoneToUsername(phoneNumber));
    newUser.set("password", helpers.generatePassword(phoneNumber));
    newUser.set("smsVerified", false);
    return newUser;
}

【问题讨论】:

    标签: javascript parse-platform deployment sdk


    【解决方案1】:

    我遇到了同样的问题,我发现每当我尝试在全局级别调用函数时都会遇到同样的错误。我唯一一次能够调用函数是在其他函数的范围内。

    关于您的代码,我想您正在尝试导出函数本身,例如

    exports.createSmsVerification = createSmsVerification;
    

    你拥有的代码:

    exports.createSmsVerification = createSmsVerification();
    

    实际调用函数并导出结果。

    【讨论】:

    • 是的,这基本上就是问题所在。让我难过的是模糊的错误信息。
    • 是的,我从 Parse 收到了很多无用的错误消息。他们关于有效模块化云代码的文档也不是很好,它是超级成功或失败的。很高兴看到更多 sn-ps 和中小型示例项目。
    【解决方案2】:

    这花了我大约 3/4 天的时间来找到答案。它不在文档中。错误一点都不清楚。

    问题似乎与export 的使用方式有关。我假设使用exports.methodName = methodName() 是试图调用该方法,而不是将其设置为exports 的属性。 exports.methodName = methodName 也可以正常工作。

    以下代码不起作用

    function createSmsVerification(user) {
        return getUserSmsVerification(user)
            .then(function (verification) {
                var verificationQuery = new Parse.Query("Verification");
                return verificationQuery.first(); <-- this is the line causing the error
            })
            .then(function (verification) {
                return verification;
            }, function (error) {
                return Parse.Promise.error("createSmsVerification - " + error.message);
            });
    }
    exports.createSmsVerification = createSmsVerification();
    

    以下代码有效

    exports.createSmsVerification = function(user) {
        return getUserSmsVerification(user)
            .then(function (verification) {
                var verificationQuery = new Parse.Query("Verification");
                return verificationQuery.first();
            })
            .then(function (verification) {
                return verification;
            }, function (error) {
                return Parse.Promise.error("createSmsVerification - " + error.message);
            });
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-09-23
      • 2017-10-10
      • 2016-06-19
      • 1970-01-01
      • 2019-06-23
      • 2014-12-11
      • 1970-01-01
      • 2021-03-16
      相关资源
      最近更新 更多