2014-04-24 73 views
0

我試圖使用nodejs的加密模塊,並將所有必需的模塊添加到我的雲文件夾中,並根據需要('雲/ ..)更改所有require('..')方法,但獲取部署到雲時出錯:解析雲:模塊已被加載

更新失敗,無法加載觸發器。錯誤是錯誤:模塊雲/ stream.js已經被加載

在_stream_readable.js:26:14在 stream.js:28:19在 crypto.js:40:14在 main.js :3:14 由於stream_readable.js需要stream.js,並且stream.js和stream_readable.js之間存在循環依賴關係。

是否有任何解決方案或解決方法爲這個循環依賴?

+0

如果'cloud'相對於腳本的目錄,你有沒有嘗試'要求(」 ./雲/ ..);'? – mscdex

+0

引用的js文件位置成功,沒有路徑問題。 –

回答

0

作爲顯示在文檔 https://www.parse.com/docs/cloud_code_guide#modules

您需要使用您自己的模塊

var coolNames = ['Ralph', 'Skippy', 'Chip', 'Ned', 'Scooter']; 
exports.isACoolName = function(name) { 
    return coolNames.indexOf(name) !== -1; 
} 

var name = require('cloud/name.js'); 
name.isACoolName('Fred'); // returns false 
name.isACoolName('Skippy'); // returns true; 
name.coolNames; // undefined. 
+0

情況並非如此,沒有可訪問性問題。 –

+0

From Docs「爲了避免加載模塊產生不必要的副作用,Cloud Code的模塊與CommonJS模塊的工作方式類似。」因此,請嘗試將stream.js封裝在exports變量中,然後將stream_readable中使用的stream.js封裝在另一個導出變量中 – CLSource

0

我被困在這幾個星期,以及何時使用出口。結果NodeJS並不是用於解析雲代碼簽名簽名/驗證的最佳選擇(但無論如何),但我確實找到了解決方案。

根據Chris Stewart的回覆here,您可以改爲使用jsrsasign庫。

這裏有一個工作示例的一些雲代碼:

Parse.Cloud.define("verifySignature", function(request, response) { 
    var KJUR = require('cloud/jsrsasign/npm/lib/jsrsasign.js'); 
    var strPubKey = '-----BEGIN PUBLIC KEY-----(snip)'; 

    // initialize 
    var pubKey = KJUR.KEYUTIL.getKey(strPubKey); 
    var data = request.params.data; 
    var signature = request.params.signature; 
    var verifier = new KJUR.Signature({"alg": "SHA1withRSA", "prov": "cryptojs/jsrsa"}); 

    // initialize for signature validation 
    verifier.initVerifyByPublicKey(pubKey); 

    // update data 
    verifier.updateString(data); 

    // verify signature 
    if (verifier.verify(base64ToHex(signature)) 
     response.success("Signature verified"); 
    else 
     response.error("Signature could not be verified"); 
} 

function base64ToHex(str) { 
    for (var i = 0, bin = atob(str.replace(/[ \r\n]+$/, "")), hex = []; i < bin.length; ++i) { 
    var tmp = bin.charCodeAt(i).toString(16); 
    if (tmp.length === 1) tmp = "0" + tmp; 
    hex[hex.length] = tmp; 
    } 
    return hex.join(" "); 
} 

function atob(base64) { 
    var tableStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz/"; 
    var table = tableStr.split(""); 

    if (/(=[^=]+|={3,})$/.test(base64)) throw new Error("String contains an invalid character"); 
    base64 = base64.replace(/=/g, ""); 
    var n = base64.length & 3; 
    if (n === 1) throw new Error("String contains an invalid character"); 
    for (var i = 0, j = 0, len = base64.length/4, bin = []; i < len; ++i) { 
    var a = tableStr.indexOf(base64[j++] || "A"), b = tableStr.indexOf(base64[j++] || "A"); 
    var c = tableStr.indexOf(base64[j++] || "A"), d = tableStr.indexOf(base64[j++] || "A"); 
    if ((a | b | c | d) < 0) throw new Error("String contains an invalid character"); 
    bin[bin.length] = ((a << 2) | (b >> 4)) & 255; 
    bin[bin.length] = ((b << 4) | (c >> 2)) & 255; 
    bin[bin.length] = ((c << 6) | d) & 255; 
    }; 
    return String.fromCharCode.apply(null, bin).substr(0, bin.length + n - 4); 
}